您的位置:首页 > 数据库

java基础18(Javaoo13)—— 数据库编程

2016-12-11 18:39 197 查看
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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: