mysql中如何动态创建表?

wujiezhejiang 2008-06-15 10:44:00
使用创建表的mysql语句,然后执行就可。
比如:在程序执行过程中获取到表名、表字段名和字段属性,根据这些生成
creat table 表名(字段名1 属性1,字段名2 属性2。。。)
然后下面的程序中执行该语名,就可创建该表。
...全文
747 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
yxb0317 2008-06-17
  • 打赏
  • 举报
回复
学习
wolfgang_l 2008-06-17
  • 打赏
  • 举报
回复
感谢,学习一下。
wujiezhejiang 2008-06-17
  • 打赏
  • 举报
回复
谢了.学到很多
树成 2008-06-16
  • 打赏
  • 举报
回复
stmt.executeUpdate(sql);

dll语句不能用这个方法执行,这个方法是执行更新语句的,返回影响的行数。
生成表要用stmt.execute(sql); 方法来执行,返回一个boolen值,boolen代表语句是否执行成功。
zhj92lxs 2008-06-16
  • 打赏
  • 举报
回复
本人名字就是害虫,害虫当然不会干好事了。。。。。。。。
hye4 2008-06-16
  • 打赏
  • 举报
回复
这个改一下:
st = con.prepareStatement(sql);
result= st.execute();
hye4 2008-06-16
  • 打赏
  • 举报
回复
这是我在sql server 执行的建表建触发器语句:

/**
* 创建中间表或者触发器
*
* @param sql String
* @return boolean 返回语句执行结果,true 成功,false 失败
*/
private boolean createTableOrTrigger(String sql)
{
Connection con = null;
PreparedStatement st = null;
boolean result = false;
try
{
con = dbh.getConnection();
st = con.prepareStatement(sql);
st.execute();
result = true;
dbh.closeConnections(null, st, con);
}
catch (SQLException ex)
{
Log.error("Unable to create :" +
sql + " ,ErrorCode :" + ex.getErrorCode() +
",Exception :" +
ex.getLocalizedMessage());
dbh.closeConnections(null, st, con);
}

return result;
}

建立中间表的语句:
/**建立中间表*/
public static final String
createMiddleTableSQL =
"CREATE TABLE [dbo].[AlarmsMiddleTbl] ( "
+ " [id] [int] NOT NULL , "
+ " [DeviceID] [smallint] NULL , "
+ " [Aid] [char] (10) COLLATE Chinese_PRC_BIN NULL , "
+ " [BeginTime] [datetime] NULL , "
+ " [EndTime] [datetime] NULL , "
+ " [Severity] [char] (2) COLLATE Chinese_PRC_BIN NULL , "
+ " [CondType] [char] (25) COLLATE Chinese_PRC_BIN NULL , "
+ " [DetailID] [smallint] NULL , "
+
" [AckNotes] [char] (150) COLLATE Chinese_PRC_BIN NULL , "
+
" [Description] [char] (255) COLLATE Chinese_PRC_BIN NULL , "
+
" [Systemtimes] [char] (30) COLLATE Chinese_PRC_BIN NULL "
+ ") ON [PRIMARY] ";


因为mysql的语法跟sql server不太一样,自己改一下。
zhj92lxs 2008-06-15
  • 打赏
  • 举报
回复
真是抱歉啊,本人是菜鸟,无能为力啊!!!!!!!!!1
zhj92lxs 2008-06-15
  • 打赏
  • 举报
回复
呵呵,我误导你了
wujiezhejiang 2008-06-15
  • 打赏
  • 举报
回复
那里没有错,错在创建表是有误,一个stmt也能执行多次,你不要误到别人在自己没有懂的情况下
zhj92lxs 2008-06-15
  • 打赏
  • 举报
回复
stmt.executeUpdate(sql); 执行这句之前先要在stmt = con.createStatement(); 一个stmt不能执行多次
wujiezhejiang 2008-06-15
  • 打赏
  • 举报
回复
在后面加了空格还是有错误的
我的原程序如下:
public class CreateTabel {
private static String tabelname;
public CreateTabel(String tabelname){
Connection con = null;
ResultSet rs = null;
try{
String url = "jdbc:mysql://127.0.0.1:3306/test";
String username = "root";
String password = "wu123456";
String driver = "com.mysql.jdbc.Driver";
Class.forName(driver).newInstance();
con = DriverManager.getConnection(url,username,password);
Statement stmt = con.createStatement();
String sql = "drop table "+tabelname;
try{
stmt.executeUpdate(sql);
}catch(Exception e1){
System.out.println("表不存在!");
}
sql = "create table "+ tabelname+
"(id int(11) primary key,"+"name varchar(12) not null)";
stmt.executeUpdate(sql);

}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(con!=null) con.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
public static void main(String[] args) {
new CreateTabel(tabelname);

}
}
youngsun1983 2008-06-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhj92lxs 的回复:]
"create table"+ tablename+ 在table后面加一个空格,否则会连载一起,当然不会成功
[/Quote]
对,后面自然也要个空格
zhj92lxs 2008-06-15
  • 打赏
  • 举报
回复
"create table"+ tablename+ 在table后面加一个空格,否则会连载一起,当然不会成功
wujiezhejiang 2008-06-15
  • 打赏
  • 举报
回复
String tablename;//tablename是动态创建的表
String sql = "create table"+ tablename+
"(id int(11) primary key,"+"name varchar(12) not null)";
我这样也不行呀,连接有错误,
请你给出语法.谢谢
树成 2008-06-15
  • 打赏
  • 举报
回复
拼接好create table语句,直接用jdbc执行就可以了。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧