zoukankan      html  css  js  c++  java
  • JDBC的学习之路(一)

    使用sql要配置路径

    首先到官网下载 http://dev.MySQL.com/downloads/connector/

    因为是java与数据库连接,所以选择 Connector/J

     download -->(mysql-connector-java-5.1.43.tar.gz)   不用登陆,鼠标下滑到底端,选择No thanks,just start my download

    -----------------版本下载自己想要的就行 -------------------

    下载之后解压

    然后在所在项目右键单击

    选择  

    Build Path-->Configure Build Path-->Libraries界面下,选择 Add External JARs-->找到mysql-connector-java-5.1.43-bin.jar位置选中后确定,ok,即可

    Driver接口

    ----Driver接口由数据库厂家提供,对于java开发者而言,只需要使用Driver接口就可以啦

    ----在编程中要连接数据库,必须先装载特定厂家的数据库驱动程序,不同的数据库有不同的装载方法. 这里推荐下载Navicat for MySQL绿色版.官网下载,https://navicatformysql.en.softonic.com/     解压,配置,(配置中有一项,一般选择utf-8.......)       263

    ----驱动就是各个数据库厂商实现的Sun公司提供的JDBC接口,即对Connection等接口的实现类的jar文件

    ----装载MySQL驱动

          --Class.forName("com.mysql.jdbc.Driver");

    ----装载Oracle驱动

          --Class.forName("oracle.jdbc.driver.OracleDriver");

    Connection接口

    ----Connection与特定数据库连接(会话),在连接上下文中执行SQL语句并返回结果.

    ----DriverManager的getConnection()方法建立在JDBC URL中定义的数据库Connection连接上

    ----连接MySQL数据库:

        --Connection conn=DriverManager.getConnection("jdbc:mysql://host:port/database","user","password");

    ----连接ORACLE数据库:

        --Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@host:port:database","user","password");

     1 package com.jxust.jdbc;
     2 /**
     3  * 测试和数据库建立连接
     4 
     5  * 
     6  */
     7 import java.sql.Connection;
     8 import java.sql.DriverManager;
     9 import java.sql.SQLException;
    10 
    11 
    12 public class Demo01 {
    13 
    14     //测试和数据库建立连接
    15     public static void main(String[] args) {
    16         Connection conn=null;
    17         try {
    18             //加载驱动类
    19             Class.forName("com.mysql.jdbc.Driver");
    20             long start=System.currentTimeMillis();
    21             //建立连接(连接对象内部其实包含了Socket对象,是一个远程的连接,比较耗时,这是Connection对象管理的一个要点)
    22             //在真正的开发中,为了提高效率,都会使用连接池管理连接对象
    23              conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","*****");
    24             long end=System.currentTimeMillis();       //主机IP     端口/数据库名     user    密码
    25             System.out.println(conn);
    26             System.out.println("建立连接,耗时为:"+(end-start)+"ms毫秒");
    27             
    28         } catch (ClassNotFoundException | SQLException e) {
    29         
    30             e.printStackTrace();
    31         }
    32         finally{
    33             if(conn!=null){       //连接的关闭
    34                 try {
    35                     conn.close();
    36                 } catch (SQLException e) {
    37                     
    38                     e.printStackTrace();
    39                 }
    40             }
    41         }
    42     }
    43 }
     
     1 package com.jxust.jdbc;
     2 
     3 import java.sql.Connection;
     4 import java.sql.DriverManager;
     5 import java.sql.SQLException;
     6 import java.sql.Statement;
     7 
     8 
     9 public class Demo02 {
    10 
    11     //测试Statement接口用法,执行SQL语句,以及SQL注入问题
    12     public static void main(String[] args) {
    13         Statement stmt=null;
    14         Connection conn=null;
    15         try {
    16             //加载驱动类
    17             Class.forName("com.mysql.jdbc.Driver");
    18             //建立连接(连接对象内部其实包含了Socket对象,是一个远程的连接,比较耗时,这是Connection对象管理的一个要点)
    19             //在真正的开发中,为了提高效率,都会使用连接池管理连接对象
    20              conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","z****");
    21             System.out.println(conn);
    22              stmt=conn.createStatement();
    23 //            String name="xiamu";
    24             //传参只能采用拼字符串的形式,很容易被遭到破坏
    25 //            String sql="insert into t_user(username,pwd,regTime) values('"+name+"',555,now())";
    26 //            String sql="insert into t_user(username,pwd,regTime) values('xiamu',555,now())";
    27 //            stat.execute(sql);
    28             
    29             //测试SQL注入
    30             String id="5 or 1=1";
    31             String sql="delete from t-user where id="+id;  //永为true,数据库数据会被恶意改动,不安全,
    32 //            String sql="delete from t_user where id=5";
    33             stmt.execute(sql);
    34             
    35         } catch (ClassNotFoundException | SQLException e) {
    36         
    37             e.printStackTrace();
    38         }finally{
    39             if(stmt!=null){                   //后开的先关
    40                 try {
    41                     stmt.close();
    42                 } catch (SQLException e) {
    43                     
    44                     e.printStackTrace();
    45                 }
    46             }
    47             if(conn!=null){
    48                 try {
    49                     conn.close();
    50                 } catch (SQLException e) {
    51                     
    52                     e.printStackTrace();
    53                 }
    54             }
    55         }
    56     }
    57 }
     1 package com.jxust.jdbc;
     2 
     3 import java.sql.Connection;
     4 import java.sql.DriverManager;
     5 import java.sql.PreparedStatement;
     6 import java.sql.SQLException;
     7 
     8 /**
     9  * 测试PreparedStatement的基本用法
    10  */
    11 
    12 //测试PreparedStatement的基本用法
    13 public class Demo03 {
    14 
    15     
    16     public static void main(String[] args) {
    17         PreparedStatement ps=null;
    18         Connection conn=null;
    19         try {    //加载驱动类
    20             Class.forName("com.mysql.jdbc.Driver");
    21              conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","z****");
    22             
    23             /**
    24              * ? 占位符,在输入对应值的时候会进行预处理,可以防止SQL注入
    25              */
    26             String sql="insert into t_user(username,pwd,regTime) values(?,?,?)";
    27              ps=conn.prepareStatement(sql);
    28 //            ps.setString(1, "happy1");  //参数索引是从1开始计算,而不是0,
    29 //            ps.setString(2, "123");   //根据row的属性不懂,选择不同的setXxx方法,setDate(),setDouble();.....
    30 //            ps.setString(1, "happy2");  //继续插入happy2
    31 //            ps.setString(2, "12456");
    32 //            ps.setDate(3, new java.sql.Date(System.currentTimeMillis()));
    33             
    34             //也可以使用setObject方法处理参数,避免记各个类型的烦恼
    35             ps.setObject(1, "happy4");
    36             ps.setObject(2, "7889");
    37             ps.setObject(3, new java.sql.Date(System.currentTimeMillis()));  
    38                              //java.sql.Date是java.Util.Date的子类
    39             
    40             
    41             System.out.println("插入一行记录");
    42 //            ps.execute();
    43             int count=ps.executeUpdate(); //executeUpdate  运行insert/update/delete操作,返回更新行数 executeQuery()  返回结果集对象
    44             System.out.println(count);
    45         } catch (ClassNotFoundException | SQLException e) {
    46             // TODO Auto-generated catch block
    47             e.printStackTrace();
    48         }finally{
    49             if(ps!=null){
    50                 try {
    51                     ps.close();
    52                 } catch (SQLException e) {
    53                     e.printStackTrace();
    54                 }
    55             }
    56             if(conn!=null){
    57                 try {
    58                     conn.close();
    59                 } catch (SQLException e) {
    60                     e.printStackTrace();
    61                 }
    62             }
    63         }    
    64     } 
    65 }
     1 package com.jxust.jdbc;
     2 
     3 import java.sql.Connection;
     4 import java.sql.DriverManager;
     5 import java.sql.PreparedStatement;
     6 import java.sql.ResultSet;
     7 import java.sql.SQLException;
     8 
     9 /**
    10  * 测试ResultSet接口的基本用法
    11  */
    12 
    13 
    14 public class Demo04 {
    15 /**
    16  * 测试ResultSet接口的基本用法
    17  * 依序关闭使用之对象及连接            ResultSet-->Statement-->Connection
    18  *                           一定要分开写(如果其中一个异常,要保证下面的也关闭,嵌套写就不会有这种效果)
    19  * @param args
    20  */    
    21     
    22     public static void main(String[] args) {
    23         PreparedStatement ps=null;
    24         Connection conn=null;
    25         ResultSet rs=null;
    26         try {    //加载驱动类
    27             Class.forName("com.mysql.jdbc.Driver");
    28              conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","****");
    29         
    30             String sql="select id,username,pwd from t_user where id>?";   //select*from....是返回所有的列
    31              ps=conn.prepareStatement(sql);
    32             ps.setObject(1, 2); //把id大于2的记录都取出来
    33             
    34              rs=ps.executeQuery();
    35             
    36             while(rs.next()){   //Iterator式迭代,每调用一次,next移动一位,同时返回一个判断下一个是否为空的boolean值
    37                 System.out.println(rs.getInt(1)+"----"+rs.getString(2)+"----"+rs.getString(3));
    38             }
    39             
    40         } catch (ClassNotFoundException | SQLException e) {
    41             // TODO Auto-generated catch block
    42             e.printStackTrace();
    43         }finally{
    44             if(rs!=null){
    45                 try {
    46                     rs.close();
    47                 } catch (SQLException e) {
    48                     
    49                     e.printStackTrace();
    50                 }
    51             }
    52             if(ps!=null){
    53                 try {
    54                     ps.close();
    55                 } catch (SQLException e) {
    56                     e.printStackTrace();
    57                 }
    58             }
    59             if(conn!=null){
    60                 try {
    61                     conn.close();
    62                 } catch (SQLException e) {
    63                     e.printStackTrace();
    64                 }
    65             }
    66         }
    67     } 
    68 }
  • 相关阅读:
    SogouCloud.exe进程导致SQL Server服务无法启动
    SQL Server 锁实验(INSERT加锁探究)
    php如何处理大数据高并发
    PHP变量的初始化以及赋值方式介绍
    PHP数组具有的特性有哪些
    PHP中Session ID的实现原理分析
    PHP提高SESSION响应速度的方法有哪些
    PHP中Redis扩展无法加载问题
    关于PHP中依赖注入的详细介绍
    PHP中接口与抽象类的异同点有哪些
  • 原文地址:https://www.cnblogs.com/z-712/p/7443521.html
Copyright © 2011-2022 走看看