河南省建设厅举报网站/怎样去推广自己的网店
一、执行DDL(数据库定义语言)
CREATE , DROP , ALTER 语句 : 使用PreparedStatement对象的execute()方法
对于DDL是否执行成功:对于任何sql语句执行报错(不成功),都会报错SQLException错误
举例:CREATE语句
@Testpublic void test() throwsException {
Connection conn=JDBCUtils.getConnection();
String sql= "CREATE TABLE student(\n" +
" id INT PRIMARY KEY AUTO_INCREMENT,\n" +
" sname VARCHAR(200) NOT NULL,\n" +
" note VARCHAR(200) NOT NULL\n" +
")";
PreparedStatement ps=conn.prepareStatement(sql);ps.execute();
JDBCUtils.closeResource(conn,ps);//关闭资源
}
二、执行DQL(数据库查询语言)
SELECT 语句 : 使用PreparedStatement对象的executeQuery()方法
对于DQL,只要执行成功,返回的必然是ResultSet对象,获取其中的值类似于迭代器。
查询一行数据(这里的异常没有处理,简化代码,勿怪)
@Testpublic void test() throwsException {
Connection conn=JDBCUtils.getConnection();
String sql= "SELECT `id`,`name`,`email`,`birth` FROM customers WHERE id = ?";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setObject(1,1);//设置第一个参数为1,填充?替代的值
ResultSet rs =ps.executeQuery();if(rs.next()){int id = rs.getInt(1);
String name= rs.getString(2);
String email= rs.getString(3);
Date date= rs.getDate(4);
System.out.println(id+"\t"+name+"\t\t"+email+"\t"+date); //这里可以new一个对象接受
}
JDBCUtils.closeResource(conn,ps,rs);//关闭资源
}
查询多行数据(这里的异常没有处理,简化代码,勿怪)
@Testpublic void test() throwsException {
Connection conn=JDBCUtils.getConnection();
String sql= "SELECT `id`,`name`,`email`,`birth` FROM customers WHERE id BETWEEN ? AND ?;";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setInt(1,2);//设置第一个参数为2,填充?替代的值
ps.setInt(2,5);//设置第二个参数为5,填充第二个?替代的值
ResultSet rs =ps.executeQuery();while(rs.next()){int id = rs.getInt("id");
String name= rs.getString("name");
String email= rs.getString("email");
Date date= rs.getDate("birth");
System.out.println(id+"\t"+name+"\t"+email+"\t"+date); //这里可以new一个对象接受,然后添加到集合中去
}
JDBCUtils.closeResource(conn,ps,rs);//关闭资源
}
如何做到通用查询,通过ResultSetMetaDate提取出结果集的元数据。
public T getInstance(Classclazz, String sql, Object... args) {
Connection conn= null;
PreparedStatement ps= null;
ResultSet rs= null;try{//1.获取数据库连接
conn =JDBCUtils.getConnection();//2.预编译sql语句,得到PreparedStatement对象
ps =conn.prepareStatement(sql);//3.填充占位符
for (int i = 0; i < args.length; i++) {
ps.setObject(i+ 1, args[i]);
}//4.执行executeQuery(),得到结果集:ResultSet
rs =ps.executeQuery();//5.得到结果集的元数据:ResultSetMetaData
ResultSetMetaData rsmd =rs.getMetaData();//6.1通过ResultSetMetaData得到columnCount,columnLabel;通过ResultSet得到列值
int columnCount =rsmd.getColumnCount();if(rs.next()) {
T t=clazz.newInstance();for (int i = 0; i < columnCount; i++) {//遍历每一个列//获取列值
Object columnVal = rs.getObject(i + 1);//获取列的别名:列的别名,使用类的属性名充当
String columnLabel = rsmd.getColumnLabel(i + 1);//6.2使用反射,给对象的相应属性赋值
Field field =clazz.getDeclaredField(columnLabel);
field.setAccessible(true);
field.set(t, columnVal);
}returnt;
}
}catch(Exception e) {
e.printStackTrace();
}finally{//7.关闭资源
JDBCUtils.closeResource(conn, ps, rs);
}return null;
}
三、执行DML(数据库操作语言)
INSERT, UPDATE, DELETE 语句:使用PreparedStatement对象的executeUpdate()方法
//通用的增、删、改操作(体现一:增、删、改 ; 体现二:针对于不同的表):返回的是对数据库影响的行数
public intupdate(String sql,Object ... args){
Connection conn= null;
PreparedStatement ps= null;try{//1.获取数据库的连接
conn =JDBCUtils.getConnection();//2.获取PreparedStatement的实例 (或:预编译sql语句)
ps =conn.prepareStatement(sql);//3.填充占位符
for(int i = 0;i < args.length;i++){
ps.setObject(i+ 1, args[i]);
}//4.执行sql语句
return ps.executeUpdate();
}catch(Exception e) {
e.printStackTrace();
}finally{//5.关闭资源
JDBCUtils.closeResource(conn, ps);
}
return 0;
}