MySql(sql文+jdbc)

6714 ワード

一、基礎sql文
  • ライブラリ作成
  • /*      */
    CREATE DATABASE IF NOT EXISTS Web_Data CHARACTER SET utf8;
    /*      */
    CREATE DATABASE IF NOT EXISTS Web_Data;
    
  • 既存のデータベースを問い合わせるSHOW DATABASES;
  • 指定データベースUSE Web_Data;// Web_Data
  • に切り替える.
  • 現在動作中のデータベースを表示するSELECT database();
  • テーブル
  • を作成
    CREATE TABLE IF NOT EXISTS user(id INTEGER PRIMARY KEY 
    AUTO_INCREMENT,name VARCHAR(20),password VARCHAR(100));
    
  • データベースに既に存在するテーブルSHOW TABLES;
  • が一覧表示されます.
  • データベースを作成する文SHOW CREATE DATABASE
  • が表示されます.
  • テーブルを作成する文SHOW CREATE TABLE ;
  • が表示されます.
  • 表構造DESC ;
  • を参照
  • データベースDROP DATABASE ;
  • を削除する.
  • 削除テーブル
  • DROP TABLE   ;//         
    DELETE FROM   ;//     
    TRUNCATE TABLE   ;//     ,  。auto_increment    , 0  
    
  • この時点でテーブルのすべてのレコードを削除したい場合は、TRUNCATE TABLEまたはDELETE FROM
  • を使用します.
    //---      ---
    delete      ,    auto_increment
    truncate       (  ),          。auto_increment    0
    //---      ---
    delete              ,    
    truncate         
    
  • 修正表
  • ALTER TABLE user MODIFY name VARCHAR(50);//  name   
    ALTER TABLE user ADD sex VARCHAR(20);//  sex 
    ALTER TABLE user DROP text;//  text  
    ALTER TABLE user CHARACTER SET utf8;//     
    
  • 修正表名RENAME TABLE TO ;
  • 外部キーALTER TABLE product ADD FOREIGN KEY (category_id) REFERENCES category (cid);
  • 二、マルチテーブルクエリー
    相互接続クエリー
  • はほとんど使用されず、2つのテーブルの積
  • が得られる.
  • 構文:select * from A,B;
  • 内部接続クエリー
  • キーワードinner joinを使用し、innerは
  • を省略することができる.
         
      select * from A,B where   ;
         
      select * from A inner join B on  .
    

    外部接続クエリー
  • キーワードouter joinを使用し、outerは
  • を省略することができる.
        :left outer join
      select * from A left outer join B on   ;
        :right outer join
      select * from A right outer join B on   ;
    

    内部ジョインと外部ジョインの違い
  • 左外部接続:左テーブルのすべてのデータを問合せ、2つのテーブルの交差
  • 接続:2つのテーブルの交差を問い合わせる
  • 右外部接続:右テーブルのすべてのデータを問合せ、2つのテーブルの交差
  • サブクエリ
  • サブクエリ:1つのselect文の結果を別のselect文の一部とする(クエリ条件、クエリ結果、テーブルなど).

  • 三、JDBC開発手順
    登録ドライバ
  • 分析ステップ1 JDBC :java.sql.Driver,mysql :com.mysql.jdbc.Driver
  • 分析ステップ2 DriverManager :registerDriver(); :java.sql.Driver, DriverManager.registerDriver(new com.mysql.jdbc.Driver)
  • 不足:ハードコーディング、後期のプログラムメンテナンスと拡張が容易ではない
  • 不足:駆動登録2回
  • 分析手順3 Classを使用する場合.forName()はクラスをメモリにロードします.このクラスの静的コードは自動的に実行されます.com.mysql.jdbc.Driverソースコードでは、Driver登録
  • がアクティブに行われます.
    package cn.xjw.jdbc_demo.utils;
    import java.sql.Connection;
    import java.sql.Driver;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.logging.Logger;
    /**
     * JDBC    
     * 
     * @author xjw
     * 
     *     ,        
     * 1.    
     * 2.    
     * 3.  sql       
     * 4.[       sql          ]
     * 5.      sql
     * 6.     ,   
     * 7.    
     * 
     *       Class.forName()               
     * Class.forName("com.mysql.jdbc.Driver");
     *   Class.forName()       ,            com.mysql.jdbc.Driver        Driver  
     *
     */
    public class JDBCUtils {
        
        private static String user = "";
        private static String pswd = "";
        private static String url = "";
        private static String driver = "";
        
        static{
            /**
             *     :.properties
             *       
             */
            ResourceBundle rb = ResourceBundle.getBundle("cn.xjw.jdbc_demo.utils.MyDB");
            user = rb.getString("user");
            pswd = rb.getString("password");
            url = rb.getString("url");
            driver = rb.getString("driver");
            try {
                Class.forName(driver);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
                System.out.println("can not register driver");
            }
        }
        public static Connection getCon() throws SQLException{
            return DriverManager.getConnection(url, user, pswd);
        }
        public static void myRelease(Connection con, ResultSet rs, PreparedStatement ps){
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            rs = null;
             if(ps != null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            ps = null;
            if(con!=null){
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            con = null;
        }
    }
    
    public static void main(String[] args){
            String name = "tony";
            String pswd = "tony123321";
            String sql = "select * from user where sname=? and pid=?";
            try {
                Connection con = JDBCUtils.getCon();
                PreparedStatement ps = con.prepareStatement(sql);
                ps.setString(1, name);
                ps.setString(2, pswd);
                ResultSet rs = ps.executeQuery();
                User u = null;
                if(rs != null && rs.next()){
                    u = new User();
                    u.name = rs.getString("sname");
                }
                JDBCUtils.myRelease(con, rs,ps);
                if(u!=null){
                    System.out.println(u.name);
                }
            } catch (SQLException e) {
                e.printStackTrace();
                System.out.println("can not get con");
            }
            
        }
    
  • 一括操作
  • private static void method02(List beanList) {
            try {
                Class.forName("com.mysql.jdbc.Driver");
                Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/web09", "username", "password");
                String sql = "inset into user(sname) values(?);";
                PreparedStatement ps = con.prepareStatement(sql);
                for(User bean:beanList){
                    ps.setString(1, bean.name);
                    ps.addBatch();
                }
                ps.executeBatch();
                 if (ps != null) {
                     ps.close();
                 }
                 if (con != null) {
                     con.close();
                 }
            } catch (ClassNotFoundException | SQLException e) {
                e.printStackTrace();
            }   
        }