您的位置:首页 > 其它

JDBC基础知识

2013-10-15 12:28 363 查看
JDBC基础知识
建立数据库 建立几个表:
使用JDBC连接数据库的步骤
1,导入驱动包mysql-connector-java-5.1.13.jar 2,加载驱动
Class.forName("com.mysql.jdbc.Driver");
3,通过驱动管理器得到数据库连接对象
得到数据库连接之前,我们需要知道数据库的网络
地址,登陆账号,密码。
String url="jdbc:mysql://127.0.0.1:3306/test";
String user="root";
String password="root";
Connection conn=DriverManager.getConnection(url,user,password);
4, 得到数据库连接后就可以发送sql命令进行增删改查的操作,这个时
候需要得到Statement对象来实现这些功能
Statement stmt=conn.createStatement();
5,通过调用Statement的executeUpdate方法来实现增加,删
除,修改的功能,首先我们实现插入功能。
String sql="insert into
grade(gradename,createdate,course_teacher,teacher)
values('423脱产班','2013-05-27 21:45:31','afei',‘lsp')";
int count=stmt.executeUpdate(sql);
注意:executeUpdate方法返回受影响行数;
在插入日期数据时,可以传入标准的19位日期字符串;
6,关闭statement(sql执行对象) 和Connection(数据库
连接对象)
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
删除操作
Stringsql="delete from grade where toid= 19 ";intcount=stmt.executeUpdate(sql);修改操作
String sql="update grade set gradename = '0423脱产班' wheretoid='18' ";stmt.executeUpdate(sql);查询操作
在得到了Statement对象后,调用其executeQuery方法即可发送查询语句 ResultSet rs=stmt.executeQuery(sql);

此方法会返回结果集对象,它包含了你所查询的所有结果,通过它我们可以得到每条数据ResultSet对象的next()方法会返回布尔型来表示是否有下一行数据,并且把结果集向前移动一行while(rs.next()){
int toid=rs.getInt(1);Stringgradename=rs.getString(2);System.out.println(toid+""+gradename+" "+createdate+" "+course_teacher+""+teacher);}从下标1开始取值,并且你将要取得的数据类型要和
数据表中的数据类型一致,比如第一列数据在数据表中是int型的,也得用getInt()型来接收。需要依次关闭ResultSet, Statement, Connection
注意:下标从1开始并且不要越界ResultSet详细讲解
1,ResultSet是查询后返回的结果集,在ResuultSet内
部有类似指针的结构,在第一次调用next()方法之前,会把指针指向第一行之前。每次通过循环调用next()方法,就会把指针往下移动一行。 2,数据表中是什么类型,就用ResultSet的 “get类型”
方法 3,ResultSet对象的"get类型"方法参数可以有两种:
索引和字段名rs.getString(2)rs.getString("username")使用statement增删改查的完整代码
importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.text.SimpleDateFormat;import java.util.Date;public classTestMain { public static void main(String[] args) { //delete(); //update(); select(); } public static void insert() { try { // 加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException ex) { // 当驱动包导入失败(或者没导入),就会出现这个异常 System.out.println("数据库驱动加载失败"); }// 连接mysql的语句,加上characterEncoding是为了避免出现乱码
String url ="jdbc:mysql://127.0.0.1:3306/school?characterEncoding=utf8";
String user = "root"; String password = "root"; Connection conn = null; Statement stmt = null; try { // 通过驱动管理器得到数据库的连接对象conn =DriverManager.getConnection(url, user, password); // 通过连接对象创建statement对象(sql的执行对象) stmt = conn.createStatement(); Date date = new Date(); // String x="ab'"+date+"' c";SimpleDateFormatsdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String mytime = "2013-05-2815:59:29"; // Stringmytime=sdf.format(date);String sql = "insert into grade(gradename,createdate,course_teacher,master_teacher)values('423脱产班','"+ mytime + "','afei','sara') ";
// 最终执行sql语句的 stmt.executeUpdate(sql); } catch (SQLException ex) { ex.printStackTrace(); } finally { try { // 关闭执行对象stmt if (stmt != null) { stmt.close(); } // 关闭数据库连接对象conn if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } public static void delete(){ try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println("数据库驱动加载失败"); }Stringurl="jdbc:mysql://127.0.0.1:3306/school?characterEncoding=utf8";
String user="root"; String password="root"; Connection conn=null; Statement stmt=null; try { conn=DriverManager.getConnection(url,user,password); stmt=conn.createStatement(); stmt.executeUpdate(" delete from gradewhere toid='4' ");
}catch (SQLException e) { // TODO Auto-generated catchblock e.printStackTrace(); }finally{ try { stmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } }} public static void update(){ try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundExceptione) {throw newRuntimeException("你的驱动包导入错误或者没有导入");
}Stringurl="jdbc:mysql://127.0.0.1:3306/school?characterEncoding=utf8";
String user="root"; Stringpassword="root"; Connection conn=null; Statement stmt=null; try {conn=DriverManager.getConnection(url,user, password);
stmt=conn.createStatement(); int count=stmt.executeUpdate(" updategrade set gradename='0423脱产班',course_teacher='amao' wheretoid='5' "); System.out.println("受影响行数"+count); } catch (SQLException e) { e.printStackTrace(); }finally{ try{ if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } }catch(SQLException ex){ ex.printStackTrace(); } } } public static void select(){ try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } Connection conn=null; Statement stmt=null; ResultSet rs=null;String url="jdbc:mysql://127.0.0.1:3306/school?characterEncoding=utf8";
String user="root"; String password="root"; try { conn=DriverManager.getConnection(url, user,password); stmt=conn.createStatement(); //得到结果集对象,里面包含了所查询的所有数据 rs=stmt.executeQuery("select * from grade "); while(rs.next()){ int toid=rs.getInt(1); Stringgradename=rs.getString(2); Date date=rs.getDate(3); Stringcourse_teacher=rs.getString(4); String master_teacher=rs.getString(5);System.out.println(toid+""+gradename+" "+date+" "+course_teacher+""+master_teacher);
} } catch (SQLException e) { e.printStackTrace(); }finally{ try{ if(rs!=null){ rs.close(); } if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } }catch(SQLException ex){ ex.printStackTrace(); }} }}使用PreparedStatement
1, PreparedStatement是Statement接口的子接口,
拥有后者的所有方法; 它们最大的差别 是:PreparedStatement可以使用占位符的参数,我们在写sql的时候可以把参数 部 分用?表示,然后在后面赋值。 2 ,PreparedStatement会预编译语句,性能较好,
并且可以避免sql注入的问题(Statement不能避免),通常我们会使用PreparedStatement来代替Statement。而Statement需要写完整整个sql语句。插入操作:
PreparedStatementps= conn.prepareStatement(sql);
ps.setString(1,"423脱产班");
ps.setString(2,"2013-05-2911:17:33");
ps.setString(3,"afei");
ps.setString(4,"sara");
最后一步执行:
ps.executeUpdate()
查询操作:
String sql="select * from grade where course_teacher = ? ";
ps=conn.prepareStatement(sql);
ps.setString(1,"afei");
rs=ps.executeQuery();
使用preparestatement增查完整代码
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.PreparedStatement;
import java.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Timestamp;
importjava.util.Date;
public classTestMain {
public static void main(String[] args) {
//insert();
select();
}
public static void insert() {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn = null;
PreparedStatement ps = null;
try {
conn =DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/school?characterEncoding=utf8","root","root");
String sql ="insert into grade(gradename,createdate,course_teacher,master_teacher)values(?,?,?,?) ";
//创建预处理对象
ps = conn.prepareStatement(sql);
//给每个占位符赋值
ps.setString(1, "1001脱产班");
Date date = new Date();
//ps.setDate(2, newjava.sql.Date(date.getTime()));
ps.setString(2,"2013-05-2917:56:39");
ps.setString(3,"afei");
ps.setString(4,"saras");
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try{
if (ps != null) {
ps.close();
}
if (conn != null) {
conn.close();
}
}catch(SQLException ex){
ex.printStackTrace();
}
}
}
public static void select(){
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs=null;
try { conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/school?characterEncoding=utf8","root","root");
Stringsql="select * from grade where course_teacher=? and master_teacher=?";
ps=conn.prepareStatement(sql);
ps.setString(1,"afeis");
ps.setString(2,"1=1");
rs=ps.executeQuery();
while(rs.next()){
int toid=rs.getInt(1);
String gradename=rs.getString(2);
Timestamp date=rs.getTimestamp(3);
String course_teacher=rs.getString(4);
String master_teacher=rs.getString(5);
System.out.println(toid+""+gradename+" "+date+" "+course_teacher+""+master_teacher);
}
} catch (SQLException e) {
// TODO Auto-generated catchblock
e.printStackTrace();
}
}
}
批处理
有时候我们在实现一个功能时,需要同时执行多条sql语句,这个时候假如每次去单独执行sql语句,就会损耗性能,Statement和PreparedStatement这两个接口就提供了批处理的功能,批处理语句只能是insert,delete,update语句。
Statement的批处理
通过addBatch方法加入一条sql语句String sql1 =" insert into
grade(gradename,createdate,course_teacher,master_teacher)values('423脱产班',null,'afei','sara') ";stmt.addBatch(sql1);String sql2 =" insert into grade(gradename,createdate,course_teacher,master_teacher)values('405脱产班',null,'afei1','sara1') ";stmt.addBatch(sql2); String sql3 =" insert into student(stuname,age,telphone,address,gradeid)
values('stu1',18,'13476990909','上海张江','20') ";stmt.addBatch(sql3);加完需要执行的sql语句之后,一次性执行stmt.executeBatch();PreparedStatement的批处理
String sql = "insert into grade(gradename,createdate,course_teacher,master_teacher)values(?,?,?,?) ";
ps= conn.prepareStatement(sql);
多次加入参数,如下:
加入第一行
ps.setString(1,"423脱产班");
ps.setDate(2,null);
ps.setString(3,"afei");
ps.setString(4,"sara");
ps.addBatch();
statement的批处理
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.SQLException;
importjava.sql.Statement;
public classStatementBatch {
/**
*@param args
*/
public static void main(String[] args) {
statementBatchTest();
}
public static void statementBatchTest() {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Stringurl="jdbc:mysql://127.0.0.1:3306/school?characterEncoding=utf8";
String user="root";
String password="root";
Connection conn=null;
Statement stmt=null;
try {
conn=DriverManager.getConnection(url,user,password);
stmt=conn.createStatement();
Stringsql1="insert into student(stuname,age,telphone,address,gradeid)values('afei1','25','19089898989','上海','47')";
//把第一条语句放入批处理
stmt.addBatch(sql1);
String sql2="update student set age='100'where gradeid='48' ";
//把第二条语句放入批处理
stmt.addBatch(sql2);
String sql3=" delete from student ";
//把第二条语句放入批处理
stmt.addBatch(sql3);
//最终执行批处理
int[] counts=stmt.executeBatch();
for(int i=0;i<counts.length;i++){
System.out.println("第"+(i+1)+"句sql,影响了"+counts[i]+"行");
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try{
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
}catch(SQLException ex){
ex.printStackTrace();
}
}
}
}
preparestatement的批处理
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.PreparedStatement;
importjava.sql.SQLException;
public class PreparedStatementBatch{
public static void main(String[] args) {
preparedStatementTest();
}
public static voidpreparedStatementTest(){
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Stringurl="jdbc:mysql://127.0.0.1:3306/school?characterEncoding=utf8";
String user="root";
String password="root";
Connection conn=null;
PreparedStatement ps=null;
try {
conn=DriverManager.getConnection(url,user, password);
String sql=" insertinto student(stuname,age,telphone,address,gradeid) values(?,?,?,?,?) ";
ps=conn.prepareStatement(sql);
//加入第一次参数
ps.setString(1,"angel1");
ps.setInt(2,34);
ps.setString(3,"190876655");
ps.setString(4,"上海");
ps.setInt(5,48);
ps.addBatch();
//加入第二次参数
ps.setString(1,"angel2");
ps.setInt(2,35);
ps.setString(3,"19087fdfd6655");
ps.setString(4,"上海2");
ps.setInt(5,48);
ps.addBatch();
//加入第三次参数
ps.setString(1,"angel4");
ps.setInt(2,39);
ps.setString(3,"fdfdfd");
ps.setString(4,"上海9");
ps.setInt(5,48);
ps.addBatch();
//最终执行批处理语句
ps.executeBatch();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
if(ps!=null){
ps.close();
}
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: