JDBC初体验
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC初体验相关的知识,希望对你有一定的参考价值。
JDBC规范(掌握四个核心对象):
DriverManager:用于注册驱动
Connection: 表示与数据库创建的连接
Statement: 操作数据库sql语句的对象
ResultSet: 结果集或一张虚拟表
一、代码初体验:(首先数据库中存在相应的数据库,服务开启)
1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.ResultSet; 4 import java.sql.SQLException; 5 import java.sql.Statement; 6 7 8 import com.mysql.jdbc.Driver; 9 10 public class Demo02_JDBCTest { 11 public static void main(String[] args) throws Exception { 12 //1、导入外部jar包,mysql-connector-java,相当与驱动 13 14 //2、注册驱动 15 Driver driver = new com.mysql.jdbc.Driver(); 16 DriverManager.registerDriver(driver); 17 18 //3、创建连接,其中getConnection重载了三种方法,具体参照API 19 String url = "jdbc:mysql://localhost:3306/db_demo1?user=root&password=root"; 20 Connection conn = DriverManager.getConnection(url); 21 22 //4、得到执行sql语句的Statement对象 23 Statement stmt = conn.createStatement(); 24 25 //5、执行sql语句,返回结果 26 String sql = "select * from stu"; 27 ResultSet rs = stmt.executeQuery(sql); //结果集 28 29 while(rs.next()) { 30 for(int i = 1; i <= 4; i++) { 31 System.out.print(rs.getObject(i) + " " ); 32 } 33 System.out.println(); 34 System.out.println("-----------------"); 35 } 36 //6、关闭资源 37 rs.close(); 38 stmt.close(); 39 conn.close(); 40 } 41 }
结果展示:从数据库中读出数据到console显示
二、返回结果集 ResultSet,有如下等操作方法
boolean next() 将光标从当前位置向下移动一行
int getInt(int colIndex) 以int形式获取ResultSet结果集当前行指定列号值
int getInt(String colLabel) 以int形式获取ResultSet结果集当前行指定列名值
float getFloat(int colIndex) 以float形式获取ResultSet结果集当前行指定列号值
float getFloat(String colLabel) 以float形式获取ResultSet结果集当前行指定列名值
String getString(int colIndex) 以String 形式获取ResultSet结果集当前行指定列号值
String getString(String colLabel) 以String形式获取ResultSet结果集当前行指定列名值
Date getDate(int columnIndex);
Date getDate(String columnName);
三、改进后的做法
1、对数据库的信息进行配置,配置文件如下
使用读取配置文件实现驱动的注册和数据的连接,这种就是工厂模式,当需要更换数据库或者table时,不需要更改源代码
1 //读取配置文件信息 2 ResourceBundle rb = ResourceBundle.getBundle("dbinfo"); 3 driverClass = rb.getString("driverClass"); 4 url = rb.getString("url"); 5 username = rb.getString("username"); 6 password = rb.getString("password"); 7 //利用反射对类名进行实例化 8 Class.forName(driverClass); 9 //连接数据库 10 conn = DriverManager.getConnection(url, username, password); 11 stmt = conn.createStatement();
2、将需要从数据库中读取的数据封装对象化
以上为需要读取数据库中的数据
代码中对数据进行封装,留出set,get方法作为外界接口
1 public class User { 2 private int id; 3 private String name; 4 private String password; 5 private String email; 6 private Date brithday; 7 8 public int getId() { 9 return id; 10 } 11 12 public void setId(int id) { 13 this.id = id; 14 } 15 public String getName() { 16 return name; 17 } 18 public void setName(String name) { 19 this.name = name; 20 } 21 public String getPassword() { 22 return password; 23 } 24 public void setPassword(String password) { 25 this.password = password; 26 } 27 public String getEmail() { 28 return email; 29 } 30 public void setEmail(String email) { 31 this.email = email; 32 } 33 public Date getBrithday() { 34 return brithday; 35 } 36 public void setBrithday(Date brithday) { 37 this.brithday = brithday; 38 } 39 40 @Override 41 public String toString() { 42 return "User [id=" + id + ", name=" + name + ", password=" 43 + password + ", email=" + email + ", brithday=" + brithday 44 + "]"; 45 } 46 47 }
最后执行JDBC测试代码:
Connection conn = null; Statement stmt = null; ResultSet rs = null; conn = DBUtils.getConnection(); stmt = conn.createStatement(); rs = stmt.executeQuery("select * from user1"); List<User> list = new ArrayList<User>(); while(rs.next()) { User u = new User(); u.setId(rs.getInt(1)); u.setName(rs.getString("name")); //可以利用索引找数据库中的字段,也可以利用名称相同的条件来找 u.setPassword(rs.getString("password")); u.setEmail(rs.getString(4)); u.setBrithday(rs.getDate(5)); list.add(u); } for (User user : list) { System.out.println(user); }
以上是关于JDBC初体验的主要内容,如果未能解决你的问题,请参考以下文章