实训--day04jdbc

来源:互联网 发布:jsp写java方法 编辑:程序博客网 时间:2024/05/17 06:58

实训第四天:JDBC

昨天寝室没网,都没发。

1:jdbc操作数据库步骤:
1)加载驱动
Class.forName("com.mysql.jdbc.Drive");
2)创建数据库连接
Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1/warehouse?useUnicode=true&characterEncoding=UTF-8","root"," ");
3)编写sql语句
String sql="select * from users";
4)创建执行对象
Statement sta=conn.createStatement();
5)执行sql语句,返回结果集对象
ResultSet rs=sta.executeQuery(sql);
6)遍历结果集,获取查询结果
while(rs.next())
7)关闭数据库连接
conn.close();


2:其实就相面的步骤来讲,sql语句只直接给出的,所有查询细节多在里面,是非常不安全的
所以要引入一个预处理语句,preparedStatement,称之为预编译。
预编译:作用就是防止sql语句的注入,保证数据的安全性。
其次就是虽然预处理语句虽然在第一次执行的时候比较耗费资源,但是如果那个语句要多次执行的话,预处理语句是恨与优势的。
采用预编译的步骤和采用一般的statement的步骤区别:
1)之前我们进行查询等操作的时候,直接写完查询条件,使用预编译就在条件出使用占位符。
2)在创建完执行对象之后还有有一个数据绑定的操作,对之前使用了占位符的sql语句进行一个设置值的处理。
采用预编译语句的具体步骤:
1)加载驱动
Class.forName("com.mysql.jdbc.Drive");
2)创建数据库连接
Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1/warehouse?useUnicode=true&characterEncoding=UTF-8","root"," ");
3)编写sql语句
String sql="select * from users where id=?";
4)创建执行对象,此对象是PreparedStatement,用于防止sql注入的 预编译
PreparedStatement ps=conn.prepareStatement(sql);
5)数据绑定,赋值处理
ps.setInt(1, i);
6)执行对象,返回结果集
ResultSet rs=ps.executeQuery();
7)根据条件取出结果集里面的内容
if(rs.next())
8)关闭数据库连接
conn.close();


3:使用类加载器加载配置文件。
一般连接数据库的基本操作要使用的参数都是放在配置文件jdbc.properties中的。
加载配置文件的步骤:
1)获得该类的类对象并获得类加载器classLoader
ClassLoader cl=类名.class.getClassLoader();
2) 获得输入流:文件必须放置在src目录下
InputStream is = cl.getResourceAsStream("文件");
3)创建properties对象
Properties prop=new Properties();
4)把配置文件所在的输入流加载进prop对象,这个操作是必备的,如果没有则不能进行后续的获取配置文件里面的内容
prop.load(is);
5)获取配置文件里面的内容。
prop.getProperty("keyName");

jdbc功能封装:

配置文件:

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1/warehouse?useUnicode=true&characterEncoding=UTF-8jdbc.user=rootjdbc.password=
jdbc基本功能封装类:

package com.xishiyou.jdbc.test;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.List;import java.util.Properties;import com.xishiyou.jdbc.demo.JDBCDemo2;public class JDBCUtils {ResultSet rs=null;Connection conn=null;PreparedStatement statement;public JDBCUtils(){InputStream is=JDBCDemo2.class.getClassLoader().getResourceAsStream("jdbc.properties");if(is==null){is=JDBCDemo2.class.getClassLoader().getResourceAsStream("jdbc.properties");}Properties prop=new Properties();try {prop.load(is);}catch (IOException e) {e.printStackTrace();}try{Class.forName(prop.getProperty("jdbc.driver"));conn = DriverManager.getConnection(prop.getProperty("jdbc.url"),prop.getProperty("jdbc.user"),prop.getProperty("jdbc.password"));}catch (Exception e){e.printStackTrace();}}public int executeUpdate(String sql,List<Object> values) throws SQLException{try {//执行sql语句statement =conn.prepareStatement(sql);//数据绑定for(int i=1;i<values.size();i++){statement.setObject(i, values.get(i - 1));}}catch (SQLException e) {throw e;}return statement.executeUpdate();}public ResultSet executeQuery(String sql,List<Object> values) throws SQLException{try{statement =conn.prepareStatement(sql);if(statement!=null){//数据绑定for(int i=1;i<values.size();i++){statement.setObject(i, values.get(i-1));}}}catch (SQLException e) {throw e;}return statement.executeQuery();}public void close() throws SQLException{if(conn!=null){conn.close();}if(statement!=null){statement.close();}if(rs!=null){rs.close();}}}

测试类:

import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;public class Test {public static void main(String[] args) throws Exception{JDBCUtils demo2=new JDBCUtils();String sql="select * from users";List<Object> values=new ArrayList<>();ResultSet rs=demo2.executeQuery(sql, values);while(rs.next()){System.out.print(rs.getString(1)+":");System.out.println(rs.getString(2));}demo2.close();}}






原创粉丝点击