我想使用Java将用户给出的输入插入到Sql Table中,但是不知道需要多少coloumn。
例如。
insert into table_name values('"+id+"','"+name+"')
这个查询不起作用,因为我不知道列名,即ID,name。
我想要任何插入数据的通用查询。
答案 0 :(得分:0)
我认为没有任何通用的查询。
如果你不知道列名,你可以使用元数据找到列的名称。
您可以获取连接的元数据(数据库)
DatabaseMetaData databaseMetaData = connection.getMetaData();
您还可以获取表格列表。
String catalog = null;
String schemaPattern = null;
String tableNamePattern = null;
String[] types = null;
ResultSet result = databaseMetaData.getTables(
catalog, schemaPattern, tableNamePattern, types );
while(result.next()) {
String tableName = result.getString(3);
}
在表格中列出列名。
String catalog = null;
String schemaPattern = null;
String tableNamePattern = "my_table";
String columnNamePattern = null;
ResultSet result = databaseMetaData.getColumns(
catalog, schemaPattern, tableNamePattern, columnNamePattern);
while(result.next()){
String columnName = result.getString(4);
int columnType = result.getInt(5);
}
通过这种方式,您可以找到列名并可以动态创建查询。
答案 1 :(得分:0)
根据我的需要,我尝试了这段代码。我希望能为所有人工作。
void getTableInput(String tname,String dname)抛出ClassNotFoundException,SQLException { this.tname = tname; this.dname = dname; 扫描仪s =新扫描仪(System.in);
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String conURL = "jdbc:sqlserver://localhost:1433;databaseName=" + this.dname + ";user=JT_DATA;password=1234";
Connection con = DriverManager.getConnection(conURL);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM " + this.tname);
ResultSetMetaData rsmd = rs.getMetaData();
int colNo = rsmd.getColumnCount();
String colName[] = new String[colNo];
String[] get_User_Input = new String[100];
for (int i = 1; i <=colNo; i++)
{
colName[i-1] = rsmd.getColumnLabel(i);
System.out.print(Arrays.toString(colName) + " : ");
get_User_Input[i-1] = s.next();
}
String store="";
for(int i=0;i<colNo;i++)
{
store += "'"+get_User_Input[i]+"',";
}
store = store.substring(0,store.length() -1);
PreparedStatement pst = con.prepareStatement("insert into "+this.tname+" values ("+ store +")");
pst.executeUpdate();
System.out.println("Data Inserted");
}
但问题是这个问题。这只能插入String数据类型。