使用 MySQL 表的 java jdbc 更改数据类型
Posted
技术标签:
【中文标题】使用 MySQL 表的 java jdbc 更改数据类型【英文标题】:Change datatype using java jdbc of MySQL table 【发布时间】:2017-06-29 17:16:57 【问题描述】:如何使用 JDBC 连接 mysql 中表的 Java 将数据类型从 varchar
更改为 int
?
我尝试使用查询:
Alter table table_name CHANGE 'col 1' 'col 1' int (5 );
我使用导入选项导入的文件具有 varchar 中的值,但我只需要该表中的整数值。导入表的值不是有序的,但整数值对我很有用。
当我在 phpmyadmin 中使用 alter 查询时,它工作得非常好,但是当我尝试在 jdbc 中进行更改时,它给了我错误:
Incorrect integer value: at 'col 1';
jdbc 代码如下:
try
Connection co=DriverManager.getConnection("jdbc:mysql://localhost:3306/csv_db","root",null);
String c= " ALTER TABLE tpf1 MODIFY `col 3` int(5)";
String t="Alter table table_name CHANGE 'col 1' 'col 1' int (5 );";
Statement stmt=co.createStatement();
stmt.executeUpdate(t);
catch (SQLException ex)
JOptionPane.showMessageDialog(this, ex);
编辑
try
Connection co=DriverManager.getConnection("jdbc:mysql://localhost:3306/csv_db","root",null);
String c= " ALTER TABLE tpf1 MODIFY `col ` int(20)";
Statement stmt=co.createStatement();
stmt.executeUpdate(t);
catch (SQLException ex)
JOptionPane.showMessageDialog(this, ex);
表格截图在照片中:
这实际上是一个pdf文件并将其转换为.csv并导入我的数据库 而且我只需要表格中的整数值,而不需要任何其他字母和符号。 此代码仅适用于一列,我需要更改所有三列。那么我应该怎么做才能使用 jdbc 只获取整数值? :| :)
【问题讨论】:
只需触发另一个查询。请参阅思考链接以获取适当的查询。 ***.com/questions/21784201/… 你知道如何改变这一切吗,或者你还在纠结如何用 JDBC 来执行它? 您需要使用`col 1`
而不是'col 1'
,尽管这也可能意味着col 1
包含一个不可转换为整数值的值。
或在两个[col 1]
之间@MarkRotteveel
@YCF_L 这对 MySQL 有用吗?我认为那是特定于 MS Access、SQL Server 和 Sybase 的。
【参考方案1】:
就像@Mark Rotteveel 在评论中所说,您的查询有问题,因此您的列名应该在两个``
之间,而不是在两个''
或""
之间,如果您的列名包含不止一个部分,因此要更改列的类型,您应该使用它:
//change column type
String query = "ALTER TABLE tablename MODIFY `col 1` INT(5)";
Statement stmt = co.createStatement();
int rslt = stmt.executeUpdate(query);
要更改名称或您的列,请使用:
//change column name
query = "ALTER TABLE tablename CHANGE `old name` `new name` INT(5);";
stmt = co.createStatement();
rslt = stmt.executeUpdate(query);
所以您可以像这样检查您的查询是否成功执行:
if (rslt > 0)
System.out.println("Success");
else
System.out.println("Failed");
注意
如果您更改类型,这将更改所有列,并将其设置为0
我建议避免使用两个部分的名称,您可以使用 col_name 代替,因为这会产生问题,例如,如果您使用 JPA。
编辑
我尝试了这段代码,它工作正常:
public class UpdateColumn
static String driver = "com.mysql.jdbc.Driver";
static String DB_username = "root";
static String DB_password = "password";
static String DB_URL = "jdbc:mysql://localhost:3306/db_name";
public static void main(String args[])
/*read from the file*/
try
Class.forName(driver);
java.sql.Connection co = DriverManager.getConnection(DB_URL, DB_username, DB_password);
//change column type
String query = "ALTER TABLE tablename MODIFY `c 1` INT(5);";
Statement stmt = co.createStatement();
int rslt = stmt.executeUpdate(query);
System.out.println(rslt);
catch (ClassNotFoundException | SQLException e)
e.printStackTrace();
MySQL
create database db_name;
use db_name;
drop table t1;
create table tablename(
`c 1` varchar(5),
`c 2` int
);
INSERT INTO tablename values('java', 1);
INSERT INTO tablename values('mysql', 2);
祝你好运。
【讨论】:
好的。感谢您的回复,但从 'col 1' 更改为col 1
并没有改变。错误保持不变。我想添加另一个信息,col 1
包含字母和整数以及示例:主题、代码、课程、1、2、3、4。这些值分别位于不同的行中,我只需要整数值: )
你是什么意思保持不变你想要改变的类型或名称@AshbirDhiman
@AshbirDhiman 如果你想改名字那么这不是问题,如果你想改变类型,这可能会出问题,所以你想做什么,改名字还是改类型?
@AshbirDhiman 我编辑我的答案我现在发布我所有的代码和 SQL 所以我希望这对你有用
您可以发布您尝试过的内容吗?完整的代码?【参考方案2】:
statement.executeUpdate("ALTER TABLE table_name ALTER COLUMN column_name datatype");
【讨论】:
以上是关于使用 MySQL 表的 java jdbc 更改数据类型的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法使用 Java 和 JDBC 来监听 Microsoft SQL 数据库表的变化?