A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

                     
                      Java数据库编程--------简单实例讲解------细节分析
任务要求:
1、通过JAVA链接数据库,并创建user表,表结构如下:
       2、向表中插入3条记录姓名分别为:小歪,萌妹子,女汉字,其他字段数据自行添加
       3、删除女汉子记录
       4、查询表中所有记录,并打印出来
根据题目要求,解决此题并不难,但注意到其中有几个细节概念问题,于是想写篇帖子做个笔记。

在实际开发中一般比较常见的数据库有Oracle、DB2、MySQL等,这些数据库在使用时都是支持标准SQL语法操作的,所以各个数据库只要了解其基本命令就可以很快地上手开发。
由于我电脑没装数据库,为方便暂时装了个MySQL试着做了下,以下是代码部分:
  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.ResultSet;
  4. import java.sql.Statement;


  5. public class ConnectionDemo02 {
  6.         //定义数库驱动路径
  7.         public static final String DBDRIVER="org.gjt.mm.mysql.Driver";
  8.         //定义数据库链接地址(MySQL)
  9.         public static final String DBRUL="jdbc:mysql://localhost:3306/shxy";
  10.         //数据库链接用户名
  11.         public static final String DBUSER="root";
  12.         //数据库链接密码
  13.         public static final String DBPASS="123";
  14.        
  15.         public static void main(String args[])throws Exception  //暂时抛出所有异常
  16.         {
  17.                 //sql0: 如果数据库中已有user表,则删除(sql命令)
  18.                 String sql0="drop table if exists user ;";
  19.                 //sql1: 创建user表(sql命令)
  20.                 String sql1="create table user(id int AUTO_INCREMENT PRIMARY KEY, name varchar(30) NOT NULL, password varchar(32) NOT NULL, "
  21.                                         +"age int NOT NULL, sex varchar(2) DEFAULT'男', birthday date);";
  22.                 //sql2\sql3\sql4: 插入数据(sql命令)
  23.                 String sql2="INSERT INTO user(id,name,password,age,sex,birthday)VALUES(1,'小歪','www.ljb.com',21,'男','1993-06-20');";
  24.                 String sql3="INSERT INTO user(id,name,password,age,sex,birthday)VALUES(2,'萌妹子','www.mengmengi.com',20,'女','1993-02-22');";
  25.                 String sql4="INSERT INTO user(id,name,password,age,sex,birthday)VALUES(3,'女汉子','www.nvhanzi.com',25,'女','1993-08-08');";
  26.                 //sqldel: 删除姓名为女汉字记录(sql命令)
  27.                 String sqldel="delete from user where name='女汉子'";
  28.                 //sqlset: 查询表中所有数据(sql命令)
  29.                 String sqlsel="select * from user";
  30.                
  31.                 //定义数据库连接对象和数据操作对象
  32.                 Connection conn=null;
  33.                 Statement stem=null;
  34.                
  35.                 Class.forName(DBDRIVER);   //加载驱动
  36.                 conn=DriverManager.getConnection(DBRUL,DBUSER,DBPASS); //链接数据库
  37.                 System.out.println(conn);  //测试是否链接到数据库,输出数据库连接对象
  38.                
  39.                 stem=conn.createStatement(); //实例化数据操作对象
  40.                 //诺user表存在,则删除
  41.                 stem.execute(sql0);
  42.                 //创建user表
  43.                 stem.execute(sql1);
  44.                 //插入数据
  45.                 stem.execute(sql2);
  46.                 stem.execute(sql3);
  47.                 stem.execute(sql4);
  48.                 //删除指定数据
  49.                 stem.execute(sqldel);
  50.                
  51.                 //以下为查询数据库记录
  52.                 ResultSet rs=null;
  53.                 rs=stem.executeQuery(sqlsel);  //实例化ResultSet对象
  54.                 //打印数据库中所有记录
  55.                 while(rs.next()){
  56.                         System.out.println("ID:"+rs.getInt("id")+"\t姓名:"+rs.getString("name")+"\t密码:"+rs.getString("password")
  57.                                         +"\t年龄:"+rs.getInt("age")+"\t性别:"+rs.getString("sex")+"\t生日:"+rs.getDate("birthday"));
  58.                         System.out.println("-----------------------------------------------------------------------------------------");
  59.                 }
  60.                 rs.close();   //关闭结果集
  61.                 stem.close(); //关闭数据操作
  62.                 conn.close(); //关闭数据库
  63.         }
  64. }
复制代码

运行结果:

以下是数据库中内容:


可以发现与 Eclipse 结果是一样的,成功对数据库中的数据进行了操作。

以下依照本程序做个小小的总结以及细节分析:
  
1、数据库链接地址的形式
       JDBC虽然提供了与平台无关的数据库操作,但是各个数据库的链接地址是有差异的,JDBC的链接地址实际上由以下3个部分组成。
            *  JDBC协议:JDBC  URL 中的jdbc;
            *  子协议:驱动程序名或数据库链接机制(这种机制可由一个或多个驱动程序支持)的名称,如:mysql;
            *  子名称:一种标识数据库的方法。必须遵循“//主机名:端口/子协议”的标准URL命令约定,如://localhost:3306/shxy 。
  
2、以上代码为什么写了三个关闭操作,只写一个 数据库链接.close()不行吗?
       可以只写一个关闭连接。
       在数据库操作中都存在关闭方法,连接关闭、操作关闭、一般来说只要链接关闭,则其他的所有操作都会关闭。但是在开发中JDBC代码中一般习惯分别按照顺序关闭,即先打开的后关闭,所以以上代码依照先后顺序写了三个关闭:rs.close(); //关闭结果集
                                                                          stem.close(); //关闭数据操作
                                                                          conn.close(); //关闭数据库

      
3、以上代码虽然实现了基本功能,但是在JDBC的查询操作中,因为是将数据库表中的全部查询结果保存在了ResultSet对象(rs)中,实际上也就是保存在了内存中,所以如果查询结果数据量过大,则系统将会出现问题。这一点在系统开发中尤为重要。
   
       4、额外补充:在开发中到底使用哪种数据库?MySQL? Oracle?
          针对需要选择数据库。
          在实际开发中,数据库的选择有时是由需求方直接选定的,有时是由开发者自行选定的。但因为MySQL是免费的,所以对于一些小型数据量操作而言使用MySQL就足够了;如果数据量过大,而且需求方又提供了购买Oracle数据库费用,则可以使用Oracle。
          对于个人学习而言,MySQL就足够了。


        5、感兴趣的 MySQL 以及 驱动包已共享
            百度云盘:http://pan.baidu.com/s/1mgwRHBM



评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1 很给力!

查看全部评分

您需要登录后才可以回帖 登录 | 加入黑马