我今天学习了用jdbc连接数据库的知识,我做了简单的笔记:
1.数据库的url jdbc:mysql://loaclhost:3306/test
jdbc:表示连接数据库使用的是jdbc协议
mysql:表示连接数据库的子协议,不同的数据库使用的协议不 一样
localhost:数据库服务器所在的ip地址
3306 :使用的端口号
test:连接的数据库
2.Class.forname("com.mysql.jdbc.Driver")
它加载了字节码,但不调用com.mysql.jdbc.Driver类的构造方 法,
它注册了驱动,调用的是com.mysql.jdbc.Driver的静态代码 块
3.连接数据库有异常时,用try-catch处理
4.创建statement对象,可以看成一个容器,用来运送sql语句,
stmt=conn.createStatemrnt();
5.组织sql语句,
String sql="insert into test(id,name)
values(null,'ccc')"; null代表自增
执行sql语句:int k=symt.executeUpdate(sql);
executeUpdate 可以执行给定的sql语句,
执行DML(insert update delete)返回值是影响的行数,
执行DDL(create alter drop)语句 返回值是0
6.关闭连接:先关statement,在关conn,
if stmt!=null stmt.close();
if conn!=null conn.close();
7.执行数据库的查询语句;
***************方法一:
String sql="select id ,name from test";
Resultset rs= stmt.executeQuery(sql);//返回值为Resultset
Resultset 是一个结果集,跟表的结构类似,
8.从Resultset 里面取数据时,光标处于第一行数据的前面,
rs.next();//将结果集的光标下移一行,
rs.getXxxxx(columneLable) 参数是列的索引值,该索引值从1 开始 2 3...
int id=rs.getInt(1);//取第一列数据,
String name=rs.getString(2);//取第二列数据
9.使用while遍历 //不用判断rs!=null ,因为rs 永远不为空
while(rs.next){
int id=rs.getInt(1);
String name=rs.getString(2);
system.out.print(id+" "+name);
}
10.关闭的顺序:rs stmt conn
***********方法二:
rs.next();//将结果集的光标下移一行,
如果未指定 SQL AS 子句,则标签是列名称
int id=rs.getInt("id");//取列为"id"数据
String name=rs.getString("name");//取列为"name"数据
*************************************
练习:高考成绩查询表 (ppt jdbc01——23)
1.建立工具类:
注册数据库驱动的方法;连接数据库的方法;
关闭资源的方法;
2.建立college包,建立dao接口,建立collegedaoIpml实现类,
3.建立一个测试类,
4.建立表:
create table college
(
id int primary key AUTO_INCREMENT,
sex char(2),
idCard varchar(18),
acard varchar(15),
name varchar(12),
area varchar(30),
grade double(5,2)
)
6.建立一个javabean ,College
7.建立一个测试类test:
实例化CollegeDaoImpl
插入高考成绩:将数据封装到javabean
保存信息,调用college.savecollege(College college)
加载驱动,获取连接,创建statement对象,组织sql语句
执行sql,关闭资源,
8.更行成绩
9.查询所有的成绩:
List list=CollegedaoImpl.findall();
10.通过id来查询高考记录,
College c=findby(id)
11.通过id删除高考成绩,
******************************************
1.连接Oracle数据库:
加载字节码文件:
Class.forname("oracle.jdbc.driver.oracleDriver");
2. 获取连接:
String url="jdbc:oracle:thin:@loaclhost:1521/orcl";
//thin 表示瘦客户端,在客户端不需要安Oracle的驱动
//orcl 表示SID(不是全局数据库名称)
String username="scott";
String psw="tiger";
conn=DriverManager.getConnection(url,username,psw);
3.创建statement对象:
conn.createStatement()对
4.可滚动的ResultSet
创建一个 Statement 对象,该对象将生成具有给定类型和并 发性的 ResultSet 对象。
Statement stmt = conn.createStatement (type,concurrency);
对Mysql数据库无效
对Oralce数据有效
rs.previous()向后移动一行,
5.对MySQL数据库而言,默认情况是双向滚动,不设置类型和并 发也可以使用,而Oracle则必须设置,才能使用。
*********************************
6.用 PreparedStatement 取代 Statement 可以解决Statement 的不安全,
利用PreparedStatement往数据库插入数据,
创建PreparedStatement对象:
String sql="insert into test(id,name) values(null,'0')"
PreparedStatement pstmt=conn.PreparedStatement(sql);
pstmt.executeupdate();//DML语句返回值影响的行数
//DDL语句,返回值是0
insert into test(id,name.email,desc) values(null,?1,?2,?3)
pstmt.setString(paramIndex,xxx)
pstmt.setString(1,"huo"); //?1-->name
pstmt.setSting(2,"sss@sina.com");//?2-->email
pstmt.setString(3,"love you");//?3-->desc
**********************************************
^^^PreparedStatement与statement比较^^^
1.statement存在sql注入的不安全:
2.PreparedStatement
利用pstmt.setString(paramIndex,xxx)可以防止sql注入