JDBC学习笔记(一)基本流程

一、用JDBC连接mysql数据库基本流程


<%

    //1.注册驱动
    Class.forName("com.mysql.jdbc.Driver");
    //2.建立连接
    String url="jdbc:mysql://localhost:3306/news";
    String user="root";
    String password="qiuqiu";
    Connection conn=DriverManager.getConnection(url, user, password);
    //3.创建语句
    Statement stmt=conn.createStatement();
    //4.执行语句
    String sql="SELECT id,userName,PASSWORD,email,userType FROM news_user";
    ResultSet rs=stmt.executeQuery(sql);
    //5.处理结果
    while(rs.next()){
    System.out.println(rs.getObject("id")+"------");
    System.out.println(rs.getObject("userName")+"------");
    System.out.println(rs.getObject("PASSWORD")+"------");
    System.out.println(rs.getObject("email")+"------");
    System.out.println(rs.getObject("userType"));
    }
    //释放资源
    rs.close();
    stmt.close();
    conn.close();

     %>

二、各流程详解

  1. 注册驱动(只做一次),有三种方式:

<%
    /*1.注册驱动(只做一次),有三种方式*/
    //方式一(推荐使用):
    Class.forName("com.mysql.jdbc.Driver");
    //方式二:
    System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");
    //方式三:
    DriverManager.registerDriver(new com.mysql.jdbc.Driver());
    /*注意:
    其中方式三,会造成DriverManager中产生两个一样的驱动  并会对具体的驱动类产生依赖  所有不推荐使用
    方式二虽然不会对具体的驱动类产生依赖  但是注册不太方便  因此也很少用
    方式一不会对具体的驱动类产生依赖  书写也比较方便  推荐使用
    */
   
    /*2.建立连接(Connection)*/
    //a.代码格式
    Connection conn=DriverManager.getConnection(url, user, password);
    //b.url格式
    /*jdbc:子协议:子名称//主机名:端口/数据库名?属性名=属性值&...如果主机名与端口号是缺省值  主机名和端口号可省略:jdbc:子协议:子名称///数据库名?属性名=属性值&...*/
    /*User,Password可以用"属性名=属性值的方式告诉数据库"*/
    /*其他参数如:useUnicode = true&characterEncoding=GBK.*/
    /*3.创建可执行sql语句的对象(Statement)*/
    Statement stmt=conn.createStatement();
    /*4.执行sql语句  用ResultSet对象接受执行结果*/
    ResultSet rs=stmt.executeQuery("SELECT id,userName,PASSWORD,email,userType FROM news_user");
    /*5.rs.next()遍历查询到的结果*/
    while(rs.next()){
    System.out.println(rs.getObject("id")+"-----");
    System.out.println(rs.getObject("userName")+"-----");
    System.out.println(rs.getObject("PASSWORD")+"----");
    System.out.println(rs.getObject("email")+"----");
    System.out.println(rs.getObject("userType"));
    }
    /*6.释放资源*/
    rs.close();
    stmt.close();
    conn.close();

     %>

JDBC学习笔记(二)SQL注入

一、Statement对象执行的SQL语句需要与字符串变量进行连接的时候,传递特殊的字符就会导致SQL注入问题

String sql = "select * from user where id = ? || name = ? || age = ?";
PreparedStatement ps = conn.prepareStatement(sql);
// 把SQL语句中的第一个问号替换为变量id  ps.setInt(1, id);
// 把SQL语句中的第二个问号替换为变量name  ps.setString(2, name); 
// 把SQL语句中的第三个问号替换为变量age   ps.setInt(3, age);
// 注意在查询时不能带参数,否则会调用ps的父类Statement的executeQuery方法

ResultSet rs = ps.executeQuery();

三、PreparedStatement相对Statement的优点

  1. PreparedStatement没有SQL注入的问题。

  2. Statement会使数据库频繁编译SQL, 可能造成数据库缓冲区溢出。

  3. 数据库和驱动可以对PreparedStatement进行优化(只有在相关联的数据库连接没有关闭的情况下有效).

JDBC学习笔记(三)大文本数据的读写

String sql = "insert into my_clob values (null, ?)";
ps = conn.prepareStatement(sql);
File f = new File("D:\\BaiduNetdiskDownload\\mysql\\jdbc.sql");
Reader reader = new BufferedReader(new FileReader(f));
ps.setCharacterStream(1, reader , f.length());
int res = ps.executeUpdate();
System.out.println(res);

reader.close();

二、从数据库读取大文本数据写入到文件中

方式一:直接把数据保存到字符串中

String big_text = rs.getString("bit_text");
File f = new File("D:\\BaiduNetdiskDownload\\mysql\\jdbc.bak.sql");
Writer wt = new FileWriter(f);
wt.write(big_text);
wt.close();

方式二:通过ResultSet对象rs获取输入流读取数据,创建输出流写到文件

Reader rd = rs.getCharacterStream("bit_text");
File f = new File("D:\\BaiduNetdiskDownload\\mysql\\jdbc.bak.sql");
Writer wt = new FileWriter(f);
char[] buff = new char[1024];
int i = 0;
while ((i = rd.read(buff)) != -1)
{
  wt.write(buff, 0, i);
}
                
wt.close();

rd.close();

方式三、通过Clob对象获取输入流

cb = rs.getClob("bit_text");
Reader rd = cb.getCharacterStream();
File f = new File("D:\\BaiduNetdiskDownload\\mysql\\jdbc.bak.sql");
Writer wt = new FileWriter(f);
char[] buff = new char[1024];
int i = 0;
while ((i = rd.read(buff)) != -1)
{
  wt.write(buff, 0, i);
}
                
wt.close();
rd.close();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值