精华内容
下载资源
问答
  • java数据库编程

    千次阅读 2018-09-09 16:02:27
    JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力 JDBC驱动 JDBC驱动由数据库厂商提供 • 在个人开发与测试中,可以使用JDBC-ODBC桥连方式 • 在生产型开发中,推荐使用纯Java驱动方式   使用...

    为什么需要JDBC

    JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力

    JDBC驱动

    JDBC驱动由数据库厂商提供
    • 在个人开发与测试中,可以使用JDBC-ODBC桥连方式
    • 在生产型开发中,推荐使用纯Java驱动方式

     

    使用JDBC-ODBC桥方式连接数据库
    • 将对JDBC API的调用,转换为对另一组数据库连接API的调用
    • 优点:可以访问所有ODBC可以访问的数据库
    • 缺点:执行效率低、功能不够强大

    使用纯Java方式连接数据库
    • 由JDBC驱动直接访问数据库
    • 优点:100% Java,速度快且可跨平台
    • 缺点:访问不同的数据库需要下载专用的JDBC驱动

    JDBC编程前提
    Ø JDBC全称为:Java Data Base Connectivity(java数
    据库连接),它主要由接口组成。
    Ø 组成JDBC的2个包:
    Ø  java.sql
    Ø  javax.sql
    Ø 开发JDBC应用需要以上2个包的支持外,还需要导入相
    应JDBC的数据库实现(即数据库驱动,数据库驱动是有
    各个数据库厂商提供,是对Java sql API的标准实现)。

    try {
    Class.forName(JDBC驱动类);
    } catch (ClassNotFoundException e) {
    System.out.println("无法找到驱动类");
    }
    try {
    Connection con=DriverManager.getConnection(JDBC URL,数据库用户名,密码);
    Statement stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
    while (rs.next()) {
    int x = rs.getInt("a");
    String s = rs.getString("b");
    float f = rs.getFloat("c");
    }
    con.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }

     

    获得数据库连对象示例

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    public class ConnectionDemo02 {
    // 定义MySQL的数据库驱动程序
    public static final String DBDRIVER ="com.mysql.Driver" ;
    // 定义MySQL数据库的连接地址
    public static final String DBURL="jdbc:mysql://localhost:3306/dbtest";
    // MySQL数据库的连接用户名
    public static final String DBUSER="root";
    // MySQL数据库的连接密码
    public static final String DBPASS="root";
    public static void main(String[] args) throws Exception{
    Connection conn = null ; // 数据库连接
    Class.forName(DBDRIVER) ; // 加载驱动程序,有异常
    // 连接MySQL数据库时,要写上连接的用户名和密码,有异常
    conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
    System.out.println(conn) ;
    conn.close() ; // 数据库关闭,有异常
    }
    }

    语句声明—Statement

    Jdbc程序中的Statement对象用于向数据库发送SQL语句,Statement对象常用方法:
    • execute(String sql):用于向数据库发送任意sql语句
    • executeQuery(String sql) :只能向数据发送查询语句。
    • executeUpdate(String sql):只能向数据库发送insert、update
    或delete语句
    • addBatch(String sql) :把多条sql语句放到一个批处理中。
    • executeBatch():向数据库发送一批sql语句执行。

    执行数据库添加数据示例

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.Statement;
    public class InsertDemo01 {
    // 定义MySQL的数据库驱动程序
    public static final String DBDRIVER = "com.mysql.Driver" ;
    // 定义MySQL数据库的连接地址
    public static final String DBURL = "jdbc:mysql://localhost:3306/dbtest";
    // MySQL数据库的连接用户名
    public static final String DBUSER = "root" ;
    // MySQL数据库的连接密码
    public static final String DBPASS = "mysqladmin" ;
    public static void main(String[] args) throws Exception {
    Connection conn = null ; // 数据库连接
    Statement stmt = null ; // 数据库操作
    String sql = "INSERT INTO user(name,password,age,sex,birthday) "
    + " VALUES ('李小龙','dbtest',30,'男','2008-08-27')";
    Class.forName(DBDRIVER) ; // 加载驱动程序
    // 连接MySQL数据库时,要写上连接的用户名和密码
    conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
    stmt = conn.createStatement() ;// 实例化Statement对象
    stmt.executeUpdate(sql);// 执行数据库更新操作
    stmt.close() ; // 操作关闭
    conn.close() ; // 数据库关闭
    }}

    使用变量

    从以上的程序中可以发现,只要执行SQL语句的时候,执行的是一条标准的SQL
    语句,则肯定可以正常执行,但是程序中的SQL语句中的数据是固定的,如果现
    在要是想将全部的内容换成变量,则可以按照以下的代码编写:

    Statement stmt = null ; // 数据库操作
    String name = "李康"; // 姓名
    String password = "www.dbtestjava.cn"; // 密码
    int age = 23; // 年龄
    String sex = "女"; // 性别
    String birthday = "2003-08-27"; // 生日
    // 拼凑出一个完整的SQL语句
    String sql = "INSERT INTO user(name,password,age,sex,birthday) "
    + " VALUES ('" + name + "','" + password + "'," + age +
    ",'“ + sex + "','" + birthday + "')";

     

    执行数据库修改

    public static void main(String[] args) throws Exception {
    Connection conn = null ; // 数据库连接
    Statement stmt = null ; // 数据库操作
    int id = 3; // id
    String name = "李小龙"; // 姓名
    String password = "dbtest"; // 密码
    int age = 25; // 年龄
    String sex = "男"; // 性别
    String birthday = "2001-09-13"; // 生日
    // 拼凑出一个完整的SQL语句
    String sql = "UPDATE user SET name='" + name + "',password='"
    + password + "',age=" + age + ",sex='" + sex + "',birthday='"
    + birthday + "' WHERE id=" + id ;
    Class.forName(DBDRIVER) ; // 加载驱动程序
    // 连接MySQL数据库时,要写上连接的用户名和密码
    conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
    stmt = conn.createStatement() ;// 实例化Statement对象
    stmt.executeUpdate(sql) ; // 执行数据库更新操作
    stmt.close() ; // 操作关闭
    conn.close() ; // 数据库关闭
    }

    执行数据库删除操作

    public static void main(String[] args) throws Exception {
    Connection conn = null ; // 数据库连接
    Statement stmt = null ; // 数据库操作
    int id = 3; // id
    // 拼凑出一个完整的SQL语句
    String sql = "DELETE FROM user WHERE id=" + id;
    Class.forName(DBDRIVER) ; // 加载驱动程序
    // 连接MySQL数据库时,要写上连接的用户名和密码
    conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
    stmt = conn.createStatement() ;// 实例化Statement对象
    stmt.executeUpdate(sql) ; // 执行数据库更新操作
    stmt.close() ; // 操作关闭
    conn.close() ; // 数据库关闭
    }

    ResultSet接口

    使用SQL中的SELECT语句可以将数据库的全部结果查询出来,在JDBC的操作中数据库的所有查询记录将使用ResultSet进行接收,并使用ResultSet显示内容

     

    数据结果集—ResultSet

    • Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封
    装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了
    一个指向表格数据行的游标,初始的时候,游标在第一行之前,
    调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行
    调用方法获取该行的数据。
    • ResultSet既然用于封装执行结果的,所以该对象提供的都是用于
    获取数据的get方法:
    • 获取任意类型的数据
    • getObject(int index)
    • getObject(string columnName)
    • 获取指定类型的数据,例如:
    • getString(int index)
    • getString(String columnName)
    • 提问:数据库中列的类型是varchar,获取该列的数据调用什么
    方法?Int类型呢?bigInt类型呢?Boolean类型?

     

    从user表中查询数据

    public static void main(String[] args) throws Exception {
    ...
    ResultSet rs = null ; // 保存查询结果
    String sql = "SELECT id,name,password,age,sex,birthday FROM user" ;
    ...
    stmt = conn.createStatement() ;// 实例化Statement对象
    rs = stmt.executeQuery(sql) ;// 实例化ResultSet对象
    while(rs.next()){ // 指针向下移动
    int id = rs.getInt("id") ; // 取得id内容
    String name = rs.getString("name") ;// 取得name内容
    String pass=rs.getString("password");//取得password内容
    int age = rs.getInt("age") ; // 取得age内容
    String sex = rs.getString("sex"); // 取得sex内容
    java.util.Date d=rs.getDate("birthday");//取得birthday内容
    System.out.print("编号:" + id + ";");// 输出编号
    System.out.print("姓名:" + name + ";");//输出姓名
    System.out.print("密码:" + pass + ";");//输出密码
    System.out.print("年龄:" + age + ";");//输出年龄
    System.out.print("性别:" + sex + ";");//输出性别
    System.out.println("生日:" + d);//输出生日
    System.out.println("-----------------------");//换行
    } rs.close() ;
    // 关闭结果集
    stmt.close() ; // 操作关闭
    conn.close() ; // 数据库关闭
    }
    }

    通过编号取出数据

    • 在执行查询语句的时候,是将数据库中的查询结果返回到内存之中,所以
    rs.next()的作用,是将返回的结果依次判断,如果有结果,则使用getXxx()语句的
    形式将内容取出。
    • 当然,如果感觉以上代码再取出数据的时候输入列的名称比较麻烦,则可以按
    取值的顺序采用编号的形式将内容取出。

    while(rs.next()){ // 指针向下移动
    int id = rs.getInt(1) ; // 取得id内容
    String name = rs.getString(2);// 取得name内容
    String pass = rs.getString(3);// 取得password内容
    int age = rs.getInt(4) ; // 取得age内容
    String sex = rs.getString(5) ;// 取得sex内容
    java.util.Date d=rs.getDate(6);// 取得birthday内容
    ...
    }

    结果集操作

    • ResultSet还提供了对结果集进行滚动的方法:
    • next():移动到下一行
    • Previous():移动到前一行
    • absolute(int row):移动到指定行
    • beforeFirst():移动resultSet的最前面。
    • afterLast() :移动到resultSet的最后面。

    释放资源

    • Jdbc程序运行完后,切记要释放程序在运行过程中,创建的
    那些与数据库进行交互的对象,这些对象通常是ResultSet,
    Statement和Connection对象。
    • 特别是Connection对象,它是非常稀有的资源,用完后必须
    马上释放,如果Connection不能及时、正确的关闭,极易导
    致系统宕机。Connection的使用原则是尽量晚创建,尽量早
    的释放。
    • 为确保资源释放代码能运行,资源释放代码也一定要放在
    finally语句中。

    数据库分页

    • MySQL分页的实现:
    • Select * from table limit M,N
    • M:记录开始索引位置
    • N:取多少条记录。
    • 完成分页数据的提取显示
    • 编写一个工具方法实现分页数据获取

    PreparedStatement简介

    PreparedStatement的优势

    • 相对于Statement对象而言:
    • PreperedStatement可以避免SQL注入的问题。
    • Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement 可对SQL进行预编译,从而提高数据库的执行效率。
    • 并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。

    注意:设置日期格式的问题

    • 在PreparedStatement中定义了setDate()方法,此方法可以设置日期内
    容,但是此方法使用时,后面的Date类型变量是java.sql.Date,而不是
    java.util.Date,所以如果要想将一个java.util.Date类型的内容变为
    java.sql.Date类型的内容应该使用如下的语句形式:

    String birthday = "2007-08-27"; // 生日
    java.util.Date temp = null ; // 声明一个Date对象
    // 通过SimpleDateFormat类将字一个字符串变为java.util.Date类型
    temp = new SimpleDateFormat("yyyy-MM-dd").parse(birthday) ;
    // 通过java.util.Date取出具体的日期数,并将其变为java.sql.Date类型
    java.sql.Date bir = new java.sql.Date(temp.getTime()) ;

    执行插入操作

    public static void main(String[] args) throws Exception {
    PreparedStatement pstmt = null ;// 数据库操作
    String name = "李小龙"; // 姓名
    String password = "dbtestjava";// 密码
    int age = 30; // 年龄
    String sex = "男"; // 性别
    String birthday = "2007-08-27"; // 生日
    java.util.Date temp = null ; // 声明一个Date对象
    // 通过SimpleDateFormat类将字一个字符串变为java.util.Date类型
    temp = new SimpleDateFormat("yyyy-MM-dd").parse(birthday) ;
    // 通过java.util.Date取出具体的日期数,并将其变为java.sql.Date类型
    java.sql.Date bir = new java.sql.Date(temp.getTime()) ;
    String sql = "INSERT INTO user(name,password,age,sex,birthday) "
    + " VALUES (?,?,?,?,?)"; // 编写预处理SQL
    pstmt = conn.prepareStatement(sql) ; // 实例化PreparedStatement
    pstmt.setString(1, name) ; // 设置第一个“?”的内容
    pstmt.setString(2,password) ; // 设置第二个“?”的内容
    pstmt.setInt(3,age) ; // 设置第三个“?”的内容
    pstmt.setString(4,sex) ; // 设置第四个“?”的内容
    pstmt.setDate(5,bir) ; // 设置第五个“?”的内容
    pstmt.executeUpdate() ; // 执行数据库更新操作,不需要sql
    pstmt.close() ; // 操作关闭
    conn.close() ; // 数据库关闭
    }

    模糊查询

    public static void main(String[] args) throws Exception {
    Connection conn = null ; // 数据库连接
    PreparedStatement pstmt = null ;// 数据库操作
    String keyWord = "李" ; // 设置查询关键字
    ResultSet rs = null ; // 保存查询结果
    String sql = "SELECT id,name,password,age,sex,birthday "+
    " FROM user WHERE name LIKE ? OR password LIKE ? OR sex LIKE ?" ;
    pstmt.setString(1,"%"+keyWord+"%");//设置第一个“?”,要使用模糊查询
    pstmt.setString(2,"%"+keyWord+"%");//设置第二个“?”,要使用模糊查询
    pstmt.setString(3,"%"+keyWord+"%");//设置第三个“?”,要使用模糊查询
    rs = pstmt.executeQuery() ; // 实例化ResultSet对象
    while(rs.next()){ // 指针向下移动
    int id = rs.getInt(1) ; // 取得id内容
    String name = rs.getString(2) ; // 取得name内容
    String pass = rs.getString(3) ; // 取得password内容
    int age = rs.getInt(4) ; // 取得age内容
    String sex = rs.getString(5) ; // 取得sex内容
    java.util.Date d = rs.getDate(6) ; // 取得birthday内容
    System.out.print("编号:" + id + ";") ;
    System.out.print("姓名:" + name + ";") ;
    System.out.print("密码:" + pass + ";") ;
    System.out.print("年龄:" + age + ";") ;
    System.out.print("性别:" + sex + ";") ;
    System.out.println("生日:" + d) ;
    System.out.println("---------------------------");
    }

    查询全部

    以上程序进行的是模糊查询,在模糊查询中使用“%”表示通配符,但是这个通
    配符是要在设置具体查询内容(setXxx()方法调用)的时候使用才使用。
    • 如果,此时只是查询全部的话,则不用再设置任何的内容,如下所示:

    String sql = "SELECT id,name,password,age,sex,birthday "+
    " FROM user" ; // 此处不需要设置任何内容
    ...
    pstmt = conn.prepareStatement(sql) ; // 实例化对象
    rs = pstmt.executeQuery();// 实例化ResultSet对象

    批处理

    • 在JDBC 2.0之中,最重要的概念就应该是批处理操作了。
    • 使用批处理可以一次性的插入多条SQL语句,如果要
    完成批处理操作,则要使用addBatch()加入要执行的
    一条SQL命令以及executeBatch()执行全部命令两个
    方法完成。

    批量插入数据

    PreparedStatement pstmt = null ;// 数据库操作
    String sql="INSERT INTO user(name,password,age,sex,birthday) "
    + " VALUES (?,?,?,?,?)"; // 此处使用预处理操作
    Class.forName(DBDRIVER) ; // 加载驱动程序
    // 连接MySQL数据库时,要写上连接的用户名和密码
    conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
    pstmt = conn.prepareStatement(sql); // 实例化对象
    for (int i = 0; i < 10; i++) {
    pstmt.setString(1, "李小龙 - " + i);
    pstmt.setString(2, "dbtest - " + i);
    pstmt.setInt(3, 20 + i);
    pstmt.setString(4, "男");
    pstmt.setDate(5, new Date(new
    java.util.Date().getTime()));
    pstmt.addBatch() ; // 加入批处理等待执行
    }i
    nt temp[] = pstmt.executeBatch() ; // 批量执行
    System.out.println("更新了" + temp.length + "条数据。");

    事务处理

    • 事务处理在数据库开发中有着非常重要的作用
    • 所谓的事务就是所有的操作要么一起成功,要么一起失

    • 例如:A——B转帐,对应于如下两条sql语句
    update from account set money=money+100 where name=‘b’;
    update from account set money=money-100 where name=‘a’;
    • 事务本身具有:
    • 原子性(Atomicity)、一致性( Consistency )、隔离性
    或独立性( Isolation)、持久性(Durabilily)四个特征,以
    上的四个特征,也被称为ACID特征。

    事务处理操作步骤
    • 在MySQL中,如果要想应用事务处理的话,则应该按照
    以下的顺序输入命令:
    • 取消自动提交,执行:SET AUTOCOMMIT=0。这样所有的更新
    指令并不会立刻发送到数据表中,而只存在于当前的session
    • 开启事务,执行:START TRANSACTION或BEGIN
    • 编写数据库更新语句,如:增加、修改、删除,可以在编写的
    更新语句之间记录事务的保存点,使用SAVEPOINT指令
    • 提交事务,如果确信数据库的修改没有任何的错误,则使用
    COMMIT提交事务。在提交之前对数据库所做的全部操作都
    将保存在session之中
    • 事务回滚,如果发现执行的SQL语句有错误,则使用ROLLBACK
    命令全部撤消,或者使用ROLLBACK TO SAVEPOINT 记录点,让
    其回滚到指定的位置

     

    没有使用事务处理

    conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
    stmt = conn.createStatement();// 实例化对象
    // 加入5条SQL处理语句
    stmt.addBatch("INSERT INTO
    user(name,password,age,sex,birthday)"
    + " VALUES ('Hello-1','hello-1',11,'男','1975-03-05')");
    stmt.addBatch("INSERT INTO
    user(name,password,age,sex,birthday)"
    + " VALUES ('Hello-2','hello-2',12,'女','1976-01-07')");
    // 第三个加入的预处理语句估计写错,将名字写成“Hello-'3'”,多了一个“'”
    stmt.addBatch("INSERT INTO
    user(name,password,age,sex,birthday)"
    + " VALUES ('Hello-'3','hello-3',13,'男','1976-06-01')");
    stmt.addBatch("INSERT INTO
    user(name,password,age,sex,birthday)"
    + " VALUES ('Hello-4','hello-4',14,'女','1977-08-01')");
    stmt.addBatch("INSERT INTO
    user(name,password,age,sex,birthday)"
    + " VALUES ('Hello-5','hello-5',15,'男','1978-10-01')");
    int temp[] = stmt.executeBatch() ; // 批量执行
    System.out.println("更新了" + temp.length + "条数据。");

     

    JDBC事务操作步骤

    • 在JDBC中,如果要想进行事务处理,也需要按照指定
    的步骤完成:
    • 取消掉Connection中设置的自动提交方式:
    conn.setAutoCommit(false) ;
    • 如果批处理操作成功,则执行提交事务:conn.commit() ;
    • 如果操作失败,则肯定会引发异常,在异常处理中让事务回
    滚:conn.rollback() ;
    • 如果需要,可以设置保存点Savepoint
    Savepoint sp = conn.setSavepoint() ;

    事务基本操作

    conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
    conn.setAutoCommit(false) ;// 取消自动提交
    stmt = conn.createStatement(); // 实例化对象
    // 加入5条SQL处理语句
    stmt.addBatch("INSERT INTO user(name,password,age,sex,birthday)"
    + " VALUES ('Hello-1','hello-1',11,'男','1975-03-05')");
    stmt.addBatch("INSERT INTO user(name,password,age,sex,birthday)"
    + " VALUES ('Hello-2','hello-2',12,'女','1976-01-07')");
    // 第三个加入的预处理语句估计写错,将名字写成“Hello-'3'”,多了一个“'”
    stmt.addBatch("INSERT INTO user(name,password,age,sex,birthday)"
    + " VALUES ('Hello-'3','hello-3',13,'男','1976-06-01')");
    stmt.addBatch("INSERT INTO user(name,password,age,sex,birthday)"
    + " VALUES ('Hello-4','hello-4',14,'女','1977-08-01')");
    stmt.addBatch("INSERT INTO user(name,password,age,sex,birthday)"
    + " VALUES ('Hello-5','hello-5',15,'男','1978-10-01')");
    try{
    int temp[] = stmt.executeBatch() ;// 批量执行
    System.out.println("更新了" + temp.length + "条数据。");
    conn.commit() ; // 提交事务
    } catch (Exception e) {
    try {
    conn.rollback(); // 事务回滚
    } catch (Exception ex) {
    }
    }

     

    加入SavePoint(保存点)

    stmt = conn.createStatement();// 实例化对象
    // 加入5条SQL处理语句
    stmt.executeUpdate("INSERT INTO
    user(name,password,age,sex,birthday)"
    + " VALUES ('Hello-1','hello-1',11,'男','1975-03-05')");
    stmt.executeUpdate("INSERT INTO
    user(name,password,age,sex,birthday)"
    + " VALUES ('Hello-2','hello-2',12,'女','1976-01-07')");
    Savepoint sp = conn.setSavepoint() ; // 设置保存点
    stmt.executeUpdate("INSERT INTO
    user(name,password,age,sex,birthday)"
    + " VALUES ('Hello-4','hello-4',14,'女','1977-08-01')");
    stmt.executeUpdate("INSERT INTO
    user(name,password,age,sex,birthday)"
    + " VALUES ('Hello-5','hello-5',15,'男','1978-10-01')");
    try{
    conn.rollback(sp) ; // 回滚到保存点
    conn.commit() ; // 提交事务
    } catch (Exception e) {
    }

     


    使用元数据分析数据库

     

    使用DatabaseMetaData取得数据库的元信息

    conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
    dmd = conn.getMetaData() ; // 实例化元数据
    System.out.println("数据库名称:" +
    dmd.getDatabaseProductName());
    System.out.println("数据库版本:" + dmd.getDriverMajorVersion()
    + "."+ dmd.getDatabaseMinorVersion());
    rs = dmd.getPrimaryKeys(null, null, "user") ;// 得到表的主键
    while (rs.next()) {
    System.out.println("表类别:" + rs.getString(1));
    System.out.println("表模式:" + rs.getString(2));
    System.out.println("表名称:" + rs.getString(3));
    System.out.println("列名称:" + rs.getString(4));
    System.out.println("主键序列号:" + rs.getString(5));
    System.out.println("主键名称:" + rs.getString(6));
    }

    ResultSetMetaData

    取得ResultSet的MetaData

    ResultSetMetaData rsmd = null ; // 结果集元数据
    PreparedStatement pstmt = null ; // 数据库操作对象
    Class.forName(DBDRIVER) ; // 加载驱动程序
    // 连接MySQL数据库时,要写上连接的用户名和密码
    conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
    String sql = "SELECT id,name,password,age,sex,birthday FROM
    user" ;
    pstmt = conn.prepareStatement(sql) ; // 实例化对象
    rsmd = pstmt.getMetaData() ; // 得到结果集元数据
    System.out.println("一共返回" +rsmd.getColumnCount()+"条数据。");
    if(rsmd.isAutoIncrement(1)){
    System.out.println(rsmd.getColumnName(1) +"列是自动增长的。");
    }

     

     

     

     

    展开全文
  • Java Swing 数据库 上传下载显示图片

    热门讨论 2013-09-11 23:09:29
    一共有三层,页面,action和dao层,比较简单不分包了,直接放在在一个里;还有一些封装,需要的就自己封装了,这个只是简单的展示; 使用的是Swing组件和io流; 使用上传功能获取路径(我这边的是直接指定的...
  • Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字 Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,...
  • 采用jdbc连接oracle数据库,测试数据库连接是否正常,已经封装好的jar,只需要配置好数据库连接环境,扔到服务器上,直接执行java -jar XXXX 即可
  • 利用Java开发数据库应用系统时,经常需要在用户界面上显示查询结果。由于SUN公司提供的JDK1.x开发工具不是可视化的集成开发环境 (IDE),不能象Delphi、VB那样方便地把查询结果在DBGrid等表格中显示出来。因此,...
  • java 用jdbc连接数据库 显示不存在的数据库,可是我数据库明明就存在呀? ![图片说明](https://img-ask.csdn.net/upload/201808/03/1533280888_999122.png) ![图片说明]...
  • java连接数据库显示数据

    万次阅读 2017-01-29 19:50:13
     java要连接MySQL数据库需要用到JDBC工具(mysql-connector-java-5.1.39-bin.jar),这是一个jar,不同的数据库对应不同的jar,这里用的是MySQL数据库jar,导入很简单,鼠标对项目右击 - Build Path - ...

     1. 导入jdbc包

      java要连接MySQL数据库需要用到JDBC工具(mysql-connector-java-5.1.39-bin.jar),这是一个jar包,不同的数据库对应不同的jar包,这里用的是MySQL数据库jar包,导入很简单,鼠标对项目右击 - Build Path - Configure Build Path - 右侧选Libraries - Add External JARs,选择正确的jdbc包就行了。


    2. 创建数据库(示例: 数据库名studentdb , 表名stable)



    3 新建属性及构造方法类(stuInfo.java)

    public class stuInfo {
    	private int sno;
    	private String sname;
    	private String sex;
    	private int age;
    	
    	public int getSno() {
    		return sno;
    	}
    	public void setSno(int sno) {
    		this.sno = sno;
    	}
    	public String getSname() {
    		return sname;
    	}
    	public void setSname(String sname) {
    		this.sname = sname;
    	}
    	public String getSex() {
    		return sex;
    	}
    	public void setSex(String sex) {
    		this.sex = sex;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	
    	public stuInfo(){
    		
    	}
    	public stuInfo(int sno, String sname, String sex, int age) {
    		this.sno = sno;
    		this.sname = sname;
    		this.sex = sex;
    		this.age = age;
    	}
    }

    3. 新建主类(shoeTest.java)

    import info.stuInfo;
    
    import java.util.ArrayList;
    import java.sql.*;
    
    public class showTest {
    
    	
    	public static void main(String[] args) {
    		ArrayList<stuInfo> list = getAllStus();
    		
    		if(list.size() == 0){
    			System.out.println("暂无数据");
    		}else{
    			for(stuInfo s: list){  //遍历集合数据
    				System.out.println(s.getSno()+"\t"+s.getSname()+"\t"+s.getSex()+"\t"+s.getAge());
    			}
    		}
    
    	}
    	
    	//采用集合的方法,返回数据集合
    	public static ArrayList<stuInfo> getAllStus(){
    		ArrayList<stuInfo> stulist = new ArrayList<stuInfo>();
    		
    		String url = "com.mysql.jdbc.Driver"; //加载驱动包
    		String connectSql = "jdbc:mysql://127.0.0.1:3306/studentdb"; //链接MySQL数据库
    		String sqlUser = "root"; //数据库账号
    		String sqlPasswd = "*****"; //你的数据库密码
    		
    		Connection con = null;
    		PreparedStatement psm = null;
    		ResultSet rs = null;
    		
    		
    		try {
    			//加载驱动包
    			Class.forName(url);
    			//连接MYSQL
    			con = DriverManager.getConnection(connectSql,sqlUser,sqlPasswd);
    			//执行MYSQL语句
    			psm = con.prepareStatement("select * from stable");
    		    rs = psm.executeQuery();
    			System.out.println("编号"+"\t"+"姓名"+"\t"+"性别"+"\t"+"年龄");
    			while(rs.next()){
    				stuInfo s = new stuInfo();
    				s.setSno(rs.getInt(1));
    				s.setSname(rs.getString(2));
    				s.setSex(rs.getString(3));
    				s.setAge(rs.getInt(4));
    				
    				stulist.add(s);	
    			}
    			
    			//关闭数据库连接
    			rs.close();
    			psm.close();
    			con.close();
    			
    		} catch (Exception e) {
    			System.out.println("显示所有数据报错,原因:"+e.getMessage());
    		}
    		
    		return stulist;	
    	}
    	
    
    }
    


    4. 运行测试



    展开全文
  • Java连接Sqlserver数据库小白

    千次阅读 多人点赞 2020-06-01 00:29:14
    为了再java中连接sqlserver数据库,我们需要利用账号密码进行数据库的登陆。 操作如下: 0x01: 我们第一次登陆是通过windons身份验证直接可以连接数据库。 0x02: ...JAVA配置部分 操作如下 0x01:

    Sqlserver设置账号密码登陆

    为了再java中连接sqlserver数据库,我们需要利用账号密码进行数据库的登陆。

    操作如下:

    0x01:

    在这里插入图片描述
    我们第一次登陆是通过windons身份验证直接可以连接数据库。

    0x02:

    在这里插入图片描述
    在这里插入图片描述
    进入安全性,设置SQL serverwindows身份验证模式。点击确定
    即可。

    0x03:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    设置完密码之后我们需要重新启动数据库:
    在这里插入图片描述
    测试连接:
    通上步操作:右键 -> 连接 -> 使用sql server身份进行验证
    在这里插入图片描述
    在这里插入图片描述

    JAVA配置部分

    操作如下

    0x01:

    下载sqljdbc:

    链接:https://pan.baidu.com/s/1BRZiXIHP3VtdMiuOkrfj-Q
    提取码:tyu0

    什么是JDBC技术:

    JDBC技术全称是Java DataBase Connectivity,是一套面向对象的应用程序接口,指定了统一的访问关系型数据库的标准接口。JDBC是一种底层的API,因此访问数据库的时候需要在业务逻辑层中嵌入SQL语句。SQL语句是面向关系的,依赖于关系模型,所有通过JDBC技术访问数据库也是面向关系的。JDBC技术主要完成以下几个任务:

    • 与数据库建立一个连接。
    • 向数据库发送SQL语句。
    • 处理从数据库返回的结果。

    0x02:

    下载sqljdbc后,我们打开eclipse进行配置
    首先
    我们新建一个文件夹如下图所示:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    接着:
    我们把下载好的sqljdbc直接赋值到改文件夹下:
    在这里插入图片描述
    在这里插入图片描述
    我们进行路径配置:打开后你的页面如下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    测试数据库连接

    0x01:

    本地测试:

    使用talnet命名进行测试
    talnet 127.0.0.1 1433
    出现如下页面代表连接成功
    在这里插入图片描述
    若提示“不能打开到主机的连接,在端口 1433: 连接失败”,则说明1433端口没有打开,需要进行以下配置。然后重启数据库,重启完毕后,接下来继续使用命令测试1433端口是否打开。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    如果是显示telnet不是内部命令:参考https://jingyan.baidu.com/article/7c6fb428d60c6e80642c90ee.html

    0x02:

    Eclipse中进行测试:

    新建DBManager类:
    并且在module-info.java中添加如下图所示代码:
    在这里插入图片描述
    测试代码:

    package gmc.zll;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    
    public class DBManager {
    	private Connection con;
    	private Statement sta;
    	private ResultSet rs;
    	/********************静态块可以提高效率***********/
    	static {
    		try {
    			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	/**
    	 * 加载驱动程序
    	 */
    	
    	public Connection getConnection(){
    	/****1433是你自己的SQLserver端口号(默认是1433)*********/
    	/**************DatabaseName是你要连接的数据库名称*********/
    		String url = "jdbc:sqlserver://localhost:1433;DatabaseName=teaching";
    		try {
    			/**第一个sa是你的SQLserver用户名,第二个是此用户名所对应的密码***/
    			con = DriverManager.getConnection(url, "sa", "123456");
    			sta = con.createStatement();
    			System.out.println("链接成功");
    		} catch (SQLException e) {
    			System.out.println("连接失败");
    			e.printStackTrace();
    		}
    		
    		return con;
    	}
    	
    	public ResultSet query(String sql){
    		con = getConnection();
    		try {
    			rs = sta.executeQuery(sql);
    			while(rs.next()) {
    				String sno = rs.getString("sno");
    				String cno = rs.getString("cno");
    				String score = rs.getString("score");
    				System.out.print("学号"+sno+' ');
    				System.out.print("课程号"+cno+' ');
    				System.out.print("分数"+score+' ');
    				System.out.print("\n");
    			}
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		System.out.println(rs);
    		return rs;
    	}
    
    	public static void main(String[] args){
    		DBManager c = new DBManager();
    		c.getConnection();
    		String sql = "select * from sc";
    		c.query(sql);
    	}
    }
    
    
    

    测试结果:
    在这里插入图片描述
    数据库内容:
    在这里插入图片描述

    参考连接:

    [1] https://blog.csdn.net/lq1759336950/article/details/87527914
    [2] https://www.cnblogs.com/chenlove/p/9159227.html
    [3] https://jingyan.baidu.com/article/7c6fb428d60c6e80642c90ee.html
    [4] https://jingyan.baidu.com/article/f3e34a12c55af7f5ea653549.html

    展开全文
  • Java数据库的介绍和使用

    万次阅读 多人点赞 2019-09-19 11:29:28
    数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问...

    数据库

    第一章 介绍

    数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。
    数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。

    第二章:常见数据库管理系统

    • MySQL
      MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
    • Orcale
      Oracle数据库被认为是业界目前比较成功的关系型数据库管理系统。Oracle数据库可以运行在UNIX、Windows等主流操作系统平台,完全支持所有的工业标准,并获得最高级别的ISO标准安全性认证。
    • DB2
      DB2是IBM公司的产品,DB2数据库系统采用多进程多线索体系结构,其功能足以满足大中公司的需要,并可灵活地服务于中小型电子商务解决方案。
    • Microsoft SQL Server
      SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点。

    第三章:SQL语言(Structure Query Language)

    DDL

    Data Definition Language 数据定义语言

    • 作用:用来定义数据库对象:库、表、列等
    /* 操作数据库 */
    --增 create
    create database 数据库名; --创建新的数据库
    create database 数据库名 character set GBK;--创建新的字符集为GBK的数据库
    --查 show
    show databases;--查看DBMS中所有的数据库
    show create database 数据库名;--查看数据库的定义信息
    --改 alter
    alter database 数据库名 character set utf8;--把数据库改成utf8字符集
    --删 drop
    drop database 数据库名;--删除数据库
    --其他
    use 数据库名;--使用数据库
    select database();--查看当前正在使用的数据库
    flush privileges;--刷新数据库
    
    /* 操作表 */
    --增 create
    create table 表名(--创建新表
    字段名1 字段类型(长度) [约束],
    字段名2 字段类型(长度) [约束],
    ...
    );
    --查 show
    show tables;--查询数据库中有的表
    show create table 表名;--查看表格的创建细节
    desc 表名;--查看表的字段信息					
    --改 alter
    alter table 表名 add 列名 数据类型[约束];--添加一个列
    alter table 表名 change 旧列名 新列名 新数据类型[约束];--修改列的列名
    alter table 表名 modify 列名 新数据类型[约束];--修改列的数据类型
    alter table 表名 drop 列名;--删除表的列
    alter table 表名 AUTO_INCREMENT=5;--重新设置自增id
    rename table 旧表名 to 新表名;--修改表名
    alter table 表名 character set 字符集;--修改表的字符集
    --删 drop
    drop table 表名;
    drop table if exists 表名;--如果表存在,则删除;如果不存在,也不会报错.这种语句是MySql特有的语句,其他的数据库都是不支持这种语法的
    

    DML

    Data Manipulation Language 数据操作语言

    • 作用:用来定义数据库记录(数据)
    --增 insert
    insert into 表名 values(字段值1,字段值2, ...);--全字段插入
    insert into 表名(字段1) values(字段值1);--部分字段插入
    insert into 表名 values(记录1的所有字段),(记录2的所有字段)...;--一次性插入多条 数据
    --改 update
    update 表名 set 列名1=列值1,列名2=列值2 ... where 列名=;--修改操作
    update 表名 set 列名1=列值1;--没有where条件的,会直接修改所有列名的值
    update 表名 set 列名1 = replace(列名1,'原内容','要替换的内容');--批量替换字段里的字符串
    --删 delete
    delete from 表名 where 列名=;--删除表中条件是where的
    delete from 表名;--删除表中所有数据,表结构还在,删除后的数据可以找回
    truncate table 表名;--删除表中所有数据,把表直接drop掉,然后再创建一个同样的新表-删除的数据不能找回。该命令会让id重新从1开始自动递增
    

    DQL

    Data Query Language 数据查询语言

    • 作用:用来查询记录(数据)
      查询语句的顺序
      书写顺序:select → from →join on → where → group by → having → order by → limit
      执行顺序:from → join on → where → group by → having → select → order by → limit
      /* 简单查询 */
      select * from emp;--查询所有列
      select empno,ename,job from emp;--查询指定的列
      select empno as '编号',ename as '别名' from emp;--给列起别名(as可以省略可以使用"",''或者不使用引号)
      select e.empno,e.ename from emp as e;--给表起别名,表中的字段也能通过表的别名来调用
      /* 条件查询 */
      --条件语句 >  <  >=  <=  !=(<>)  =
      --and(&&)
      select * from emp where deptno=10 and sal>2000;--可以使用&&带代替
      --or(||)
      select * from emp where ename='smith' or sal=5000;--可以使用||来代替
      --between...and
      select * from emp where ename between 'A' and 'F';--BETWEEN AND作用于字符型的数据的时候,包含第一个边界值,但是不包含第二个边界值
      --in(set)
      select * from emp where sal in(800,1600);--in表示包含的意思
      --is null  (尽量不要使用,会导致索引失效)
      select * from emp where comm is null;--对于null的判断不能使用=号
      --not
      select * from emp where deptno !=10;
      select * from emp where deptno <>10;
      select * from emp where not deptno =10;
      select * from emp where comm is not null;
      select * from emp where not comm is null;
      --注意
      --对于字符型的数据,是严格区分大小写的
      --Oracle在任何的平台上都是严格区分字符型数据大小写的
      --MySql在Liunx/Unix平台上严格区分字符型数据大小写,但是在window平台上不区分字符型数据大小写
      --可以使用BINARY关键字,让MySql在window平台上也严格字符字符型数据的大小写
      select * from emp where binary ename='smith';
      /* 模糊查询 */
      select * from emp where ename like '_M%';-- _ :任意一个字母 查询第二个字母是m的人
      select * from emp where ename like '%m%';-- %:任意0~n个字母 查询名字包含m的人		
      /* 字段控制查询 */		
      select salary*12 as '年薪' from emp;--可以使用算术表达式将月薪以年薪的形式显示
      select distinct deptno from emp;--去掉重复值查询
      select *,sal+ifnull(comm,0) from emp;
      /* 排序 */
      select * from emp order by sal asc;--升序排序,可默认不写
      select * from emp order by sal desc;--降序排序
      select * from emp order by sal desc,empno asc;--按月薪降序排序,如果月薪相同,按编号升序排序
      /* 单行函数 */
      --year(日期字段) 将日期格式化为年(月日时分秒同理)
      select year(now())--输出今年
      select year('2018-01-01');--2018
      --substr(被截取字段名称,起启下标,截取长度) 截取字符串的函数
      select ename,substr(ename,2,1) from emp;
      --length(str) 返回字符型数据的长度
      select ename,length(ename) from emp;
      select * from emp where length(ename)=5;--查询名字的长是5的员工
      --lower(str) 把字符型数据转换为小写的字符
      select ename,lower(ename) from emp;
      --upper(str) 把字符型数据转换为大写的字符
      select * from emp where binary ename=upper('smith');
      /* 聚合函数 */
      --count() 统计指定列不为NULL的记录行数
      select count(*) from emp;
      select count(*) from emp where sal+ifnull(comm,0)>2500
      --max() 计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算
      select max(sal) from emp;
      --min() 计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算
      select min(sal) from emp;
      --sum() 计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0
      select sum(sal) from emp;
      --avg() 计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0
      select avg(sal) from emp;
      /* 分组查询 */
      --分组查询
      select deptno,sum(sal) from emp group by deptno;
      --HAVING子句
      select deptno,sum(sal) from emp group by deptno having sum(sal)>9000;
      	--having与where的区别:where是先筛选后分组;having是先分组后筛选
      /* LIMIT */
      --分页查询
      select * from emp limit 5;--查询5行记录,默认从0开始
      select * from emp limit 0,5;--查询5行记录,起始行从0开始
      select * from emp limit 3,10;--查询10行记录,起始行从3开始
      	--注意:LIMIT只能在MySql和SqlServer中有效
      /* 多表查询(跨表查询) */
      --联合查询
        --说明:合并结果集就是把两个select语句的查询结果合并到一起,被合并的两个结果:列数、列类型必须相同
        --union 去除重复记录
        --union all 不去除重复记录
      --连接查询
        --内连接
          --等值连接:建立在父子表关系上,用等号来连接两个表
      		select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
        		from emp e,dept d
        		where e.deptno=d.deptno;--SQL1992语法
        	select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
        		from emp e
        		inner join dept d on(e.deptno=d.deptno);--SQL1999语法
        	--使用内连接的时候,inner可以忽略
      	--非等值连接:两个表之间没有父子关系,用非等号来连接两个表
      	select e.empno,e.ename,e.sal,s.grade,s.losal,s.hisal
        	from emp e,salgrade s
        	where e.sal between s.losal and s.hisal;--SQL1992语法
        select e.empno,e.ename,e.sal,s.grade,s.losal,s.hisal
        	from emp e
        	join salgrade s on e.sal between s.losal and s.hisal--SQL1999语法
        	--自连接:使用别名将一个表虚拟成两个表(父子表),然后再这两个表上面做等值连接
        	select e.empno '员工编号',e.ename '员工姓名',m.empno '经理编号',m.ename '经理姓名'
        		from emp e,emp m
        		where e.mgr=m.empno && m.empno=7698--SQL1992语法
        	select e.empno '员工编号',e.ename '员工姓名',m.empno '经理编号',m.ename '经理姓名'
        		from emp e
        		join emp m on(e.mgr=m.empno)
        		where m.empno=7698--SQL1999语法
        --外连接
      		--左外连接(LEFT OUTER JOIN):左外连接可以把左表中不满足对应关系的数据查询出来
      		select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
        		from emp e
        		left outer join dept d on e.deptno=d.deptno;--使用外连接的时候,outer可以忽略
        	select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
        		from dept d
        		left join emp e on e.deptno=d.deptno;--左表的位置是相对的
        	--右外连接(RIGHT OUTER JOIN):右外连接可以把右表中不满足对应关系的数据查询出来
        	select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
        		from emp e
        		right join dept d on e.deptno=d.deptno;
        	--全外连接(FULL OUTER JOIN):可以把左右两个表中不满足对应关系的数据都查询出来
        	select e.empno,e.ename,e.job,e.sal,d.deptno,d.dname
        		from emp e
        		full join dept d on e.deptno=d.deptno;--Oracle支持全外连接,MySql不支持全外连接
        	--join的更多用法见下表
      	--子查询
        	  --1.用来给主查询提供查询条件或查询数据而首先执行的一个查询
        	  --2.主查询使用子查询的结果
        	  --子查询必须要放在()里面
        	--分类
        	  --出现在where中的子查询,用来给查询提供查询条件的
        	  select * from emp
        	  where sal>(select max(sal) from emp where deptno=30);--查询高于30部门所有人工资的员工信息
        	  --出现下from后面的子查询,用来给主查询提供查询数据的(all,any)
        	  select * from emp
        	  where sal>all(select sal from emp);--查询高于30部门所有人工资的员工信息
        	  --(了解)出现在查询列表中的子查询,功能类似于外连接的效果
    

    在这里插入图片描述

    常用函数

    /* 数据函数 */
    -- abs() 取绝对值
    select abs(-1); -- 1
    -- round() 用于数据的四舍五入
    select round(13.26723,2);-- 结果13.27
    --rand() 生成随机数
    select rand();--生成一个0到1之间的随机数
    -- ceiling() 向上取整
    select ceiling(2.5); -- 3
    -- floor() 向下取整
    select floor(2.5); -- 2
    -- sign() 符号函数: 负数返回-1,正数返回1,0返回0
    select sign(2);  -- 1
    /* 字符串函数 */
    -- char_length(str) 返回字符串包含的字符数
    select char_length('abcdef'); -- 6
    -- concat() 合并字符串,参数可以有多个
    select concat('我爱','北京','天安门'); -- 我爱北京天安门
    -- insert() 替换字符串,从某个位置开始替换某个长度
    select insert('一二三四五六七',1,3,'八八八'); -- 八八八四五六七
    -- lower() 把字符型数据转换为小写的字符
    select lower('Manaphy'); -- manaphy
    -- upper() 把字符型数据转换为大写的字符
    select upper('Manaphy'); -- MANAPHY
    -- left() 从左边截取字符串
    select left('Manaphy',3); -- Man
    -- right() 从右边截取字符串
    select right('Manaphy',3); -- phy
    -- replace() 替换字符串
    select replace('一二三四五六七','四五','八九'); -- 一二三八九六七
    -- substr(被截取字段名称,起启下标,截取长度) 截取字符串的函数
    select substr('一二三四五六七',1,3); -- 一二三
    -- reverse() 反转字符串
    select reverse('一二三四五六七'); -- 七六五四三二一
    /* 日期函数 */
    -- year(日期字段) 将日期格式化为年(月日时分秒同理)
    select year(now());-- 输出今年
    select year('2018-01-01');-- 2018
    -- 获取当前日期
    select current_date();
    select curdate();
    -- 获取当前日期和时间
    select now();
    select localtime();
    select sysdate();
    -- 获取当前时间
    select curtime();
    select current_time();
    

    DCL

    Data Control Language 数据控制语言

    • 作用:用来定义访问权限和安全级别
      /* 实体完整性 */
      --主键约束 primary key 说明:每个表中要有一个主键, 数据唯一, 且不能为null
      create table stu(
      id int primary key
      );--创建表时指定主键
      
      create table stu(
      id int,
      name varchar(10),
      primary key(id,name)
      );--联合主键,创建了两个列作为主键
      
      create table stu(
      id int,
      name varchar(10)
      );
      alter table stu add primary key(id);
      alter table stu modify id int primary key;--在已经有表的情况下使用
      
      --唯一约束 unique 说明:数据不能重复
      create table stu(
      id int primary key,
      name varchar(50) unique
      );
      
      --自动增长列
        --auto_increment(mysql)
        --identity(sqlserver)
        --sequence(oracle)
        --说明:给主键添加自动增长的数值,列只能是整数类型
      create table stu(
      id int primary key auto_increment
      );--mysql的方式
      
      /* 域完整性 */
      --数据类型
        --数值类型:tinyint(1字节) int(4字节) bigint(8字节) folat(4字节) double(8字节) decimal
        --日期类型
      	date--1000-01-01/9999-12-31
      	datetime--1000-01-01 00:00:00/9999-12-31 23:59:59
      	timestamp--1970-01-01 00:00:00/2038 结束时间是第 2147483647(2^31-1)秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07
      	time--'-838:59:59'/'838:59:59' (±35天)
      	year--1901/2155
        --字符串类型:char(定长字符串) varchar(变长字符串) binary varbinary text(长文本数据) enum set
      --非空约束
      create table stu(
      id int primary key,
      name varchar(10) not null
      );
      --默认值约束
      create table stu(
      id int primary key,
      sex varchar(2) default '男'
      );--默认是男
      insert into stu(id) values(1);--默认是男
      insert into stu values(2,default);--默认是男
      insert unto stu values(3,null);--此处是null
      --check约束
      check(sex='男' or  sex='女')--(mysql不支持)
      /* 引用完整性 */
      --外键约束
      alter table 左表 add foreign key(左表的某个字段) references 右表(主键);
      create table 表名(
      id int primary key,
      name varchar(20),
      classno bigint,
      foreign key(classno) references tb_class(classno);
        --注意
      	--1.从表的列引用了主表的主键,那么该列就称为外键
      	--2.外键的名字可以不相同
      	--3.外键的数据类型必须与主表中主键的数据类型完全相同
      	--4.外键可以是null值
      /* 表与表之间的关系 */
      --1.一对多: 一张表中的一条记录再另一张表中出现多次
      --2.多对多: 要想两张表之间实现多对多的关系,必须有一张中间表,通过中间表创建与两张表的外键约束,实现多个一	对多,使用这种方式创建外键约束,非常适合实现多个一对多。
      --3.一对一:一张表里的记录,在另外一张表里只能出现一次.表和表之间的关系必须通过外键来创建,但是外键一创建就是一对多,因此在从表里将外键设置唯一性约束,实现一对一
      
    
    展开全文
  • Java数据库基础

    万次阅读 多人点赞 2015-11-19 11:25:09
    Java数据库基础--以SQL Server为例 sql server数据库基本概念 使用文件保存数据存在几个缺点: 1、文件的安全性问题; 2、文件不利于查询和对数据的管理; 3、文件不利于存放海量数据 4、文件在程序中控制不...
  • //链接数据库 try { Statement sta = conn.createStatement();//创建sql语句的接口 ResultSet result = sta.executeQuery("select*from student");//result接受语句选中student表 ...
  • 撰写人——软件二班——陈喜平 ...完整工程: 链接:https://pan.baidu.com/s/1e_iJQ6sHIOoeLYWoeXBP5A 提取码:djhh (需要用到 mysql-5.6.24-win32,请自行下载,以及自行下载navicat或者其他数据库编译器) ...
  • MySQL数据库从入门到实战课

    万人学习 2019-12-31 14:09:39
    根据《2019-2020年中国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。 使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。 学习编程...
  • 最好每个表创建一个entity对象,一个dao类,创建servlet方法,获取链接,提取数据,存入到list中,然后通过request.setAttribute("list", list);方法把数据传到指定的页面,request....在前台用java代码配合js  
  • 数据库分页显示

    千次阅读 2019-08-22 15:08:00
    单独使用mybatis 实现 数据库分页显示 实现图: 基本就是这么显示 点击下一页就直接跳转到下一页。 首先是:配置mybatis (配置流程) 导入jsp所需要的jarjstl.jar 和 standard.jar (下载参考) 红框里表示...
  • Java进行数据库的连接

    万次阅读 多人点赞 2017-10-20 12:48:55
    因为项目进展需要用到数据库,以前在使用C\C++进行数据库的操作的时候感觉还比较简单,但是在转到JAVA平台上的时候,发现步骤还比较繁琐,加之各种书本对JAVA安装数据库的步骤都写的模棱两可。 本教程针对已经安装好...
  • Java数据库连接池详解

    千次阅读 2017-10-26 21:06:27
    1.数据库连接池概述 数据库连接的建立是一种耗时、性能低、代价高的操作,频繁的数据库连接的建立和关闭极大的影响了系统的性能。数据库连接池是系统初始化过程中创建一定数量的数据库连接放于连接池中,当程序需要...
  • 1、新增对JDK9及以上版本Java环境的支持 2、生成JavaBean更名为生成数据模型并且提供了C#、C++、Golang、Rust、Python、Objective-C、Swift等编程语言数据模型的简单模板 3、新增生成SpringBoot项目工程的功能,...
  •  java数据库连接技术(Java Database Connection,JDBC)是由java提供的一组与平台无关的数据库的操作标准,其本身由一类与接口组成,并且在操作中将按照严格的顺序执行。由于数据库属于资源操作,所以所有的数据库...
  • 将连接有mysql的java程序打包成jar格式
  • 使用mysql,sql等数据库,当你的程序出现在一个没有安装数据库的电脑,该程序无法使用数据库,但是derby是内置在项目中的数据,体积小,免安装,可以达到你想要的java数据库程序不需要配置在任何机器上运行 ...
  • 你是否像我一样,学了java,学过数据库,但却从来没有使用java连接过数据库?如果是,那么continue,如果否,那么你可以return;这篇博客先从安装mysql开始,到在mysql中创建表,最后到编写java程序连接mysql,并...
  • 实验六 Java数据库程序设计

    千次阅读 2018-06-18 19:42:50
    一、下载驱动及配置(以... 使用纯Java驱动,首先必须获得相应数据库的驱动程序;SQLServer JDBC驱动有两种:sqljdbc.jar和sqljdbc4.jar,根据所使用的JDK版本选择相应的驱动程序。并将完整路径设置到classpath...
  • java web连接数据库

    千次阅读 2020-12-15 16:52:34
    使用jsp访问数据库,并修改数据库中的某一个值,在页面显示修改成功信息。 一、准备 首先在MySQL数据库里面建立一张学生信息表,我这里是使用Navicat建立的数据库。大家也可以直接下载MySQL使用命令行的方式建立...
  • Java 数据库的基本概念

    千次阅读 2012-05-21 14:45:08
    数据库的基本概念 数据库数据库管理系统 1. 数据库 数据库(DB)是存放数据的仓库,只不过这些数据存在一定的关联,并按一定的格式存放在计算机上。从广义上讲,数据不仅包含数字,还包括了文本、图像、音频...
  • 主流Java数据库连接池比较及前瞻

    千次阅读 2018-05-06 00:00:00
    点击上方“程序员小灰”,选择“置顶公众号”有趣有内涵的文章第一时间送达!主流数据库连接池常用的主流开源数据库连接池有C3P0、DBCP、Tomcat Jdbc Pool、...
  • java连接数据库失败

    千次阅读 2018-05-20 12:30:28
    运行下面代码段,一直提示...import java.sql.*;import java.io.*;public class Login { public static void main(String[] args)throws Exception,SQLException { String url="jdbc:mysql://localhost:3306...
  • java写的基于JTable的一个简单查询界面,链接...本人多年菜鸟 里面有java生成jar的操作步骤 已经exe4j这个工具,将java打包成exe文件。 exe4j怎么用百度下吧 已经sql数据库里面的字符串与datetime类型的相互转换都有
  • H2 是一款基于 Java 实现的小巧而强大的关系型数据库,支持嵌入式、客户端/服务器以及混合部署模式。H2 数据库适合嵌入小型应用程序、元数据管理、快速应用开发和测试、内存数据库
  • import java.sql.*; import java.util.*; class Student{ String sno; String name; public Student(String sno, String name) { super(); this.sno = sno; this.name = name; } @Override...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 333,621
精华内容 133,448
关键字:

java数据库显示的包

java 订阅