java 数据库编程

JDBC
JAVA DB CONNECTION:
1.了解JDBC的概念和四种驱动的分类
JDBC分类:
1.对于开发人员:是API
2.对于数据库厂商:作为接口。让厂商实现接口。
2.掌握使用JDBC操作数据库的步骤
--------------------------------------------------------------------

步骤:
1.告知驱动管理器,配置xxxx数据库应用。
Class.forname("com.mysql.jdbc.Driver") ;
-----------------------------------加载驱动。
2.获取连接
Connection con = null ;
---注意:导包的时候导入的是 java.sql

con = DriverManager.getConnection( "jdbc:mysql : // 127.0.0.1:3306 /你要操作哪个数据库" ,"root" ,"xxxx" )
--通过驱动管理器获取连接 :三个参数 (URL , 用户名 , 密码)
--URL(统一资源定位服务):
格式:http :// ip : 端口号 / index .xxxx
协议://对方机器IP :端口号 / 资源名
本机IP:127.0.0.1()
注意: con 开启后也要在finally中书写关闭连接!
3.书写操作
----书写sql语句:
注意:java中的string类型 在sql语句中要加上单引号。
换行要谨慎。检查空格
String sql = “xxxxxxxxxxxxxxxx”; --里面写入的就是sql语句
----利用连接获取语句对象:
Statement stat =con.createStatement()
-----Statement也是来自于java 。sql包中的
----语句对象执行sql:
state.executeUpdate(sql);
-----无论增删改都是用这个方法。(会返回一个int值)
------int值返回的是影响了sql中的影响了多少行的行数

4.出现乱码:
需要在url中加参数了
1.在地址栏传参: get传参
url + ? + key1 =值 1 & key2=值2
UTF-8的问题解决:
url + ? + seUnicode = truue & characterEncoding =utf8
2.一个SSL警告的问题解决:
在url后面加上:
&useSSL=false

5.查询操作
在外面建立一个集合。如
ArrayList <xxxx> xx =new …………
查询和增删改的区别就是在 String sql 语句之后发生了改变,其余都是一样的
查询的方法:
ResultSet rs = state.executeQuery(sql);
查询返回的结果是一个 结果集
然后循环这个结果集 ( 用 while 循环
while (re.next()){
String name =rs. getSring ("列名字/别名/第几列");
这里的第几列是从1开始,列名如果被取了别名就
得用别名。
………………
………………
---是什么类型的用什么类型去接。
然后封装为 xxxx 对象
xx .add ( 上面封装的对象);
--------------------------------------------------------------------------------------------
Statement 存在 SQL注入 的风险。
因为: 都是先拼接sql,然后才交给数据库,最后数据库才进行编译执行。

→ 预编译语句对象。
PrepareStatement:
1.先把结构确定的sql交给数据库,进行编译。
2.然后再把值传入进去。
3.再让数据库执行。
-------------------------------------
1.sql 语句 需要传值的地方用 ? 替代。
注意:?只能传值,不能传任何和数据结构,或者表结构有关的语句。
String的 单引号 可以省略在,prepareStatement
2.
PreparedStatement ps = con.prepareStatement(sql);
3.
ps.set____ (arg0 , arg1) 是什么类型的值,____就选择什么
第一个arg0是第几个问号 ,从 1 开始
第二个arg1是值。

4.同样的 ps.executeQuery( ) -----------不用传SQL语句了,因为之前
给了
增删改也是一样的。
----------预编译语句过多,那么工程中效率就降低了。
----------项目中预编译语句最好不能超过100条。
----------一般用在用户输入,且在where里面。
--------------------------------------------------------------------------------------------------
事务:transaction
只影响DML语句 ,不影响DQL语句。
多条语句同时工作,一条不成功,全部都应该失败。
1.开启事务。
con.setAutoCommit(false); // 设置自动提交为false
2.构造 sql
…………………………
3.整体提交。
con.commit();
整体提交,如果一条失败,就会进入异常。
4.在异常中需要书写:
con.rollback() ;
---------------→ 如果下面的失败,就会把上面的成功的语句进行撤销!。
注意:
事务sql语句也有顺序,需要注意执行的顺序。
比如删除,如果后删除需要在子循环中用到先删除的数据,那么行为将不会成
功,所以应该注意先后顺序!!!!!

---------------------------------------------------------------------------------------------------
Insert时候得ID:
在执行SQL语句的时候需要得到他的id。
ID是由数据库生成的,在执行SQL语句的时候,要多传入一个参数。

int row =state.executeUpdate(sql , RETURN_GENERATED_KEYS );
// 这里还是返回的时候影响的行数
ResultSet ks = state .getGeneratedKeys( ); ------- 获取返回的主键。
这个返回的是 单行单列的。
while (ks.next()){
int pk = ks.getInt(1);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值