首页 > 解决方案 > 是否正在创建 derby sql 表

问题描述

我认为正在创建该表,但无法验证该表是否存在,也无法查看存在哪些列。

这是我所拥有的:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.DatabaseMetaData;

public class DBConnection{

    public static void main(String[] args){
        System.out.print('\u000C');
        Connection conn = getConnection("test3");

        // createTable(Connection conn, String name,String[] cols, String[] type, String primaryKey)
        String[] cols     = {"firstName","lastName","rowID"},
                 type     = {"varchar(20)","varchar(25)","int"};
        String name       = "myTable",         
               primaryKey = "rowId";

        createTable(conn, name, cols, type, primaryKey);
        try{
           conn.close();
        }catch(SQLException e){
            System.out.println("FATAL ERROR: Unable to close database " + e);
            System.exit(0);
        }


    }

    public static Connection getConnection(String database) {
        try{
            String URL = "jdbc:derby:" + database + ";create=true;"; 

            /* jdbc:derby specifies the driver to use to connect to the derby database
             * database is the name of the database we want to connect to.  A database can hold many tables
             * create=true is an option that creates and connects to the database if it does not exist, or just connect if it already exists.
             */

            System.out.println("Succesfully connected to " + database);
            return DriverManager.getConnection(URL); 
        }catch(SQLException e){
            System.out.println("FATAL ERROR: " + e);
            System.exit(0);
            return null;
        }   
    }

    public static void createTable(Connection conn, String name,String[] cols, String[] type, String primaryKey){

        if(cols.length != type.length){
            System.out.println("FATAL ERROR: Columns and Types of different length");
            System.exit(0);
        }
        try{


            DatabaseMetaData dbm = conn.getMetaData();
            ResultSet tables = dbm.getTables(null, null, name, null);

            //THIS IF STATEMENT DOESN'T SEEM TO WORK WHEN THE TABLE EXISTS

            if (tables.next()) {
                System.out.println(name + " exists");
            }
            else {
                System.out.println(name + " does NOT exists");
            }

            Statement stmt = conn.createStatement();
            int colCnt = cols.length;

            String cts = "CREATE TABLE " + name + " (";

            for(int i = 0; i < colCnt; i++){
                if (i != colCnt -1)cts = cts + cols[i] + " " + type[i] + ",";
                else cts = cts + cols[i] + " " + type[i] + ")";
            }

            System.out.println(cts);
            stmt.executeUpdate(cts);

            DatabaseMetaData md = conn.getMetaData();
            ResultSet columns = md.getColumns(null,null, name, null);

            //THIS WHILE LOOP NEVER PRINTS

            while(columns.next()){
              String columnName = columns.getString("COLUMN_NAME");
              String datatype = columns.getString("DATA_TYPE");
              String columnsize = columns.getString("COLUMN_SIZE");
              String decimaldigits = columns.getString("DECIMAL_DIGITS");
              String isNullable = columns.getString("IS_NULLABLE");
              String is_autoIncrment = columns.getString("IS_AUTOINCREMENT");
              //Printing results
              System.out.println(columnName + "---" + datatype + "---" + columnsize + "---" + decimaldigits + "---" + isNullable + "---" + is_autoIncrment);
            }
        }catch(SQLException e){
            System.out.println("FATAL ERROR: Unable to create table " + e);
            System.exit(0);
        }
    }
}

标签: javaderby

解决方案


只需要 toUpperCase() 表名(在两个地方)。


推荐阅读