| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1480 人关注过本帖
标题:用JDBC程序创建数据库表格
只看楼主 加入收藏
didozhp
Rank: 2
等 级:论坛游民
帖 子:38
专家分:20
注 册:2009-8-7
结帖率:87.5%
收藏
已结贴  问题点数:19 回复次数:5 
用JDBC程序创建数据库表格
编写一个程序,可以通过此程序完成一个表的创建操作,输入表名称、各个列的各名称及类型,输入完成后直接通过JDBC创建指定的表。
这个应该怎么写啊,是要定义一个sql语句,然后用Statement接口实现嘛,自己写了个,失败了,望请教……
搜索更多相关主题的帖子: 数据库 JDBC 表格 
2010-08-09 22:01
shellingford
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:19
帖 子:228
专家分:1348
注 册:2010-8-9
收藏
得分:19 
DDL和DML不一样,DDL很多数据库都有些差别的,特别是自动增长列等等,具体要看你想弄什么数据库了。
按照输入表名、列名、类型把DDL拼出来就是了。
2010-08-09 22:20
shellingford
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:19
帖 子:228
专家分:1348
注 册:2010-8-9
收藏
得分:0 
回复 楼主 didozhp
程序代码:
public static void main(String[] args) {
        // TODO Auto-generated method stub
        String s_dirver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
        String s_url="jdbc:sqlserver://localhost:1433;";
        String s_username="sa";
        String s_pwd="shellingford";
        
        String databaseName="test";
        String tableName="testtable";
        String sql="create database "+databaseName+";";
        
                //列名、类型、约束
        Object ob[][]={{"id","int","primary key"},{"name","varchar(20)",""},{"pwd","varchar(20)","unique"}};
        
        StringBuilder sb=new StringBuilder();
        sb.append("create table "+tableName+" (");
        for(int i=0;i<ob.length;i++){
            sb.append(ob[i][0]+" "+ob[i][1]+" "+ob[i][2]+" ,");
        }
        if(sb.toString().endsWith(",")){
            sb.deleteCharAt(sb.toString().length()-1);
        }
        sb.append(")");
        Connection con =null;
        try {
            Class.forName(s_dirver);
            con = DriverManager.getConnection(s_url,s_username,s_pwd);
            con.setAutoCommit(false);
            PreparedStatement pstmt = con.prepareStatement(sql);
            pstmt.executeUpdate();
            pstmt.close();
            pstmt=con.prepareStatement("use "+databaseName+";");
            pstmt.executeUpdate();
            pstmt.close();
            pstmt=con.prepareStatement(sb.toString());
            pstmt.executeUpdate();
            ();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            if(con!=null){
                try {
                    con.rollback();
                } catch (SQLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
        }finally{
            if(con!=null){
                try {
                    con.setAutoCommit(true);
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    con.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }


sql server 2005下正常,代码很简单。
如果想复杂需要修改ob为List,放入多个参数并重新写拼DDL语句的代码。
如果约束或者外键、索引等更复杂的建议在建表后用DDL语句修改表。
2010-08-09 23:03
didozhp
Rank: 2
等 级:论坛游民
帖 子:38
专家分:20
注 册:2009-8-7
收藏
得分:0 
回复 2楼 shellingford
那Statement接口只能对DML进行操作嘛,我是看到Statement接口下有个boolean execute(String sql)throws SQLException方法,说是进行执行SQL语句操作的,所以试了下,结果不行……
2010-08-09 23:50
shellingford
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:19
帖 子:228
专家分:1348
注 册:2010-8-9
收藏
得分:0 
回复 4楼 didozhp
程序代码:
public static void main(String[] args) {
        // TODO Auto-generated method stub
        String s_dirver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
        String s_url="jdbc:sqlserver://localhost:1433;";
        String s_username="sa";
        String s_pwd="shellingford";
       
        String databaseName="test";
        String tableName="testtable";
        String sql="create database "+databaseName+";";
       
                //列名、类型、约束
        Object ob[][]={{"id","int","primary key"},{"name","varchar(20)",""},{"pwd","varchar(20)","unique"}};
       
        StringBuilder sb=new StringBuilder();
        sb.append("create table "+tableName+" (");
        for(int i=0;i<ob.length;i++){
            sb.append(ob[i][0]+" "+ob[i][1]+" "+ob[i][2]+" ,");
        }
        if(sb.toString().endsWith(",")){
            sb.deleteCharAt(sb.toString().length()-1);
        }
        sb.append(")");
        Connection con =null;
        try {
            Class.forName(s_dirver);
            con = DriverManager.getConnection(s_url,s_username,s_pwd);
            con.setAutoCommit(false);
            Statement st=con.createStatement();
            st.execute(sql);
            st.execute("use "+databaseName+";");
            st.execute(sb.toString());
            st.close();
            ();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            if(con!=null){
                try {
                    con.rollback();
                } catch (SQLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
        }finally{
            if(con!=null){
                try {
                    con.setAutoCommit(true);
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    con.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

也可以创建啊

如果你那里失败的话,最好贴上你的代码或者报错信息。
2010-08-10 15:07
didozhp
Rank: 2
等 级:论坛游民
帖 子:38
专家分:20
注 册:2009-8-7
收藏
得分:0 
回复 5楼 shellingford
好的,谢谢
2010-08-10 16:20
快速回复:用JDBC程序创建数据库表格
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025372 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved