一、释放资源
主要是在所有的操作结束之后,需要释放资源(close()方法)
1 2 3 4 5 6 7 8 9 10 11 12 13
| if (rs != null) //添加一个判断rs对象是不是空(防止一行都没有) { try { rs.close(); } catch (SQLException sqlEx) { } // ignore rs = null; }
|
二、 驱动注册#
原来的DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Driver 这个类里面有静态代码块,一上来就执行了,所以等同于我们注册了两次驱动。 其实没这个必要的。
//静态代码块 —> 类加载了,就执行。
最后形成以下代码即可。
Class.forName("com.mysql.jdbc.Driver");
1 2 3 4 5 6 7 8
| //1.注册驱动 //DriverManager.registerDriver(new Driver()); //需要一个参数 这个参数是java.sql.jdbc.Driver try { Class.forName("com.mysql.jdbc.Driver"); //直接使用forName方法 } catch (ClassNotFoundException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); }
|
三、连接对象整合
其实就是把1注册驱动和2建立连接拿出来专门做一个getconn()方法,方便将前两步整合在一起。第三步开始只需要调用方法得到结果就可以。
完整代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| package lianxi; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import com.mysql.jdbc.Connection; import com.mysql.jdbc.Driver; import com.mysql.jdbc.Statement; public class JDBC{
//写在外面好更改 static String url="jdbc:mysql://localhost/student"; static String name="root"; static String password="njdxrjgc7777777."; public static java.sql.Connection getConn(){ //新建一个方法整合 java.sql.Connection conn=null; //1.注册驱动 //DriverManager.registerDriver(new Driver()); //需要一个参数 这个参数是java.sql.jdbc.Driver try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); }
//2.建立连接(url协议+数据库,user账号,password密码) try { conn=DriverManager.getConnection(url,name,password); } catch (SQLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } return conn; } public static void main(String[] args) throws SQLException{ java.sql.Connection conn = getConn(); //创建conn去得到刚才那个方法的结果 //3.创建statement,跟数据库打交道,一定需要这个对象 java.sql.Statement st=conn.createStatement(); //4.执行查询 String sql="select * from s_stu"; ResultSet rs=st.executeQuery(sql); //5.遍历每一条查询 while(rs.next()) //是否可以移动到下一行 { int id=rs.getInt("id"); //获得id String name=rs.getString("name"); //获得name int age=rs.getInt("age"); //获得age System.out.println("id="+id+" name="+name+" age="+age); } //6.释放 rs.close(); } }
|
最终代码如下:
四、创建properties
将url,name,password等放在配件内(代码如上的完整代码为例)
src下新建一个文件(properties)里面存放这几条内容
1 2 3 4
| driverClass=com.mysql.jdbc.Driver url=jdbc:mysql://localhost/student" name=root password=njdxrjgc7777777.
|
创建文件目录:
五、读取properties
主要是要将driverClass/url/name/password改到文档里之后,将四个写成static的null然后写一个static{}去加载文档内容。
主要步骤:
- 创建一个Properties属性配置对象。
- 先创建一个InputStream对象,然后调动Properties对象的load()方法去加载输入流。
- 使用Properties对象的getProperties()方法获取 url/name等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| //写在外面好更改 static String driverClass=null; static String url=null; static String name=null;; static String password=null;
static{ //1.创建一个属性配置对象 Properties properties=new Properties(); InputStream is=JDBC.class.getClassLoader().getResourceAsStream("properties"); //类.class.getClassLoader().getResourceAsStream("文件名"); //2.导入输入流 try { properties.load(is); //load方法加载 } catch (IOException e) { e.printStackTrace(); } //3.调用方法读取文档里面的url/name/password等 driverClass=properties.getProperty("driverClass"); url=properties.getProperty("url"); name=properties.getProperty("name"); password=properties.getProperty("password"); }
|
完整代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| package lianxi; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; import com.mysql.jdbc.Connection; import com.mysql.jdbc.Driver; import com.mysql.jdbc.Statement; public class JDBC{ //写在外面好更改 static String driverClass=null; static String url=null; static String name=null;; static String password=null; static{ //1.创建一个属性配置对象 Properties properties=new Properties(); InputStream is=JDBC.class.getClassLoader().getResourceAsStream("properties"); //类.class.getClassLoader().getResourceAsStream("文件名"); //2.导入输入流 try { properties.load(is); //load方法加载 } catch (IOException e) { e.printStackTrace(); } //3.调用方法读取文档里面的url/name/password等 driverClass=properties.getProperty("driverClass"); url=properties.getProperty("url"); name=properties.getProperty("name"); password=properties.getProperty("password"); } public static java.sql.Connection getConn(){ java.sql.Connection conn=null; //1.注册驱动 //DriverManager.registerDriver(new Driver()); //需要一个参数 这个参数是java.sql.jdbc.Driver try { Class.forName(driverClass); } catch (ClassNotFoundException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } //2.建立连接(url协议+数据库,user账号,password密码) try { conn=DriverManager.getConnection(url,name,password); } catch (SQLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } return conn; } public static void main(String[] args) throws SQLException{ java.sql.Connection conn = getConn(); //3.创建statement,跟数据库打交道,一定需要这个对象 java.sql.Statement st=conn.createStatement(); //4.执行查询 String sql="select * from s_stu"; ResultSet rs=st.executeQuery(sql); //5.遍历每一条查询 while(rs.next()) //是否可以移动到下一行 { int id=rs.getInt("id"); //获得id String name=rs.getString("name"); //获得name int age=rs.getInt("age"); //获得age System.out.println("id="+id+" name="+name+" age="+age); } //6.释放 rs.close(); } }
|
读取结果: