jdbc编码的步骤:
1、加载驱动并注册驱动
class.forname("com.mysql.jdbc.driver");
说明:在加载driver类时,它会自动创建自己的实例并向 drivermanager 注册该实例。
com.mysql.jdbc.driver的源码:
1 public class driver extends nonregisteringdriver implements java.sql.driver { 2 3 // register ourselves with the drivermanager 4 static { 5 try { 6 java.sql.drivermanager.registerdriver(new driver()); 7 } catch (sqlexception e) { 8 throw new runtimeexception("can't register driver!"); 9 } 10 } 11 12 // construct a new driver and register it with drivermanager 13 public driver() throws sqlexception { 14 // required for class.forname().newinstance() 15 } 16 }
2、获取与数据库的连接:connection
connection conn = drivermanager.getconnection("jdbc:mysql://localhost:3306/oa", "root", "root");
3、得到代表sql语句的对象:statement
statement stmt = conn.createstatement();
4、发送sql给数据库,如果有查询结果,则得到封装了查询结果的对象:resultset
resultset rs = stmt.executequery("select id,name,password,email,birthday from users");
5、遍历结果
while(rs.next()){
system.out.println(rs.getobject("id"));
system.out.println(rs.getobject("name"));
}
6、释放占用的资源
rs.close();
stmt.close();
conn.close();
jdbc中常用的接口和类
1、drivermanager
作用:注册驱动,得到数据库的连接
1.1注册驱动:
drivermanager.registdriver(new com.mysql.jdbc.driver());(不可取)
原因: 1、严重依赖具体的数据库驱动。
2、导致驱动注册两遍,也就是在内存中会有两个driver对象
注:new com.mysql.jdbc.driver():在new了一个driver的同时使用drivermanager把自己给注册了(查看com.mysql.jdbc.driver的源码可知)。
替代方案:
class.forname("com.mysql.jdbc.driver");
1.2获取数据库的连接:
static connection getconnection()
2、connection
所有与数据库交互都必须建立在连接的基础上
3、statement
作用:代表着sql语句
常用的方法:
resultset executequery(string sql)
int executeupdate(string sql)
boolean execute(string sql)
preparedstatement:处理 dml 语句的利器,有以下3点好处
1、预编译sql语句,数据库执行效率高。
注:statement会使数据库频繁编译sql,可能造成数据库缓冲区溢出
2、防止sql注入
3、支持参数占位符"?",简化sql语句的编写
preparedstatement pstmt = conn.preparestatement("insert into user (username, birthday) values(?,?)");
pstmt.setstring(1, user.getusername());
pstmt.setdate(2, new java.sql.date(user.getbirthday().gettime()));
pstmt.executeupdate();
4、resultset
boolean next():下移一行
boolean previous():上移一行
void absolute(int row):第一行的记录就是1
注:absolute(1) 等效于 first()、absolute(-1) 等效于last()
void beforefirst():移动到第一行的前面
void afterlast():移动到最后一行的后面
5、释放资源
rs.close();
stmt.close();
conn.close();
如对本文有疑问, 点击进行留言回复!!
SpringBoot引用阿里easyexcel,Excel导出返回浏览器下载
HashMap、Hashtable、ConcurrentHashMap三者间的异同
解决RecycleView 中Item包含Edittext时,滑动view复用导致数据错乱的问题
多线程、同步工作原理、死锁案例、Lock接口、线程的生命周期的讲解及实现
网友评论