我现在用sql建立数据库表 为啥老是提示语法错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我现在用sql建立数据库表 为啥老是提示语法错误相关的知识,希望对你有一定的参考价值。
open databases students
create table Student(学号c(8),姓名c(10),性别c(2),出生日期d,班级c(12),入学成绩n(5,1))
为数据库是建好了的,命令除中文外,全是英文格式。。
哪个大师帮我看下是什么错误啊
sqlserver写法如下
create table Student
(学号 char(8),
姓名 char(10),
性别 char(2),
出生日期 datetime,
班级 char(12),
入学成绩 numeric(5,1))
oracle的话
datetime改成date
numeric改成number追问
vfp 的数据库,嗯,谢了,行了,但是我输入了后,没有弹出我想要输入数据的页面,在数据库里修改也是改动表的格式,没法输入数据啊,怎么弄啊
参考技术A 我写的是mysql数据库里的创建此表的sql语句【已测试可以的】:CREATE TABLE student(学号 INTEGER,姓名 VARCHAR(22),性别 VARCHAR(22),出生日期 DATE,班级 VARCHAR(22),入学成绩 INTEGER ) ;
=====================================-=============-======
你的列名和类型都挤的太紧了,需要空格的~~ 还有最后的入学成绩类型n(5,1)是什么??追问
嗯,谢了,行了,但是我输入了后,没有弹出我想要输入数据的页面,在数据库里修改也是改动表的格式,没法输入数据啊,怎么弄啊?
追答插入数据 你用插入数据的sql语句啊~~
insert into student(...) values(...);
也可以直接右击这张表--然后点‘打开表’ 就能直接插入数据了,,oracle数据库的pl/sql工具也是可以直接插入数据的~~
为啥我在 MySQL 中可以成功执行时会出现 sql 语法错误
【中文标题】为啥我在 MySQL 中可以成功执行时会出现 sql 语法错误【英文标题】:Why do I get a sql grammar error when I can successfully execute in MySQL为什么我在 MySQL 中可以成功执行时会出现 sql 语法错误 【发布时间】:2020-07-28 06:39:33 【问题描述】:我正在尝试将数据插入多个表 user_inventories、user_inventory_details 和 user_inventory_images。我正在使用 Spring 框架提供的 jdbcTemplate 下面是我的插入方法。
public List<UserListing> postUserListing(String userId, String vin, String price,
String mileage, String color, List<String> images)
Preconditions.checkArgument(Strings.isNotEmpty(userId), "user id cannot be empty");
Preconditions.checkArgument(Strings.isNotEmpty(vin), "vin cannot be empty");
Preconditions.checkArgument(Strings.isNotEmpty(price), "price cannot be empty");
Preconditions.checkArgument(Strings.isNotEmpty(mileage), "mileage cannot be empty");
Preconditions.checkArgument(Strings.isNotEmpty(color), "color cannot be empty");
Preconditions.checkArgument((!images.isEmpty()), "images cannot be empty");
UserListing userListing = this.getSingleUserListingByVin(userId, vin);
if (userListing != null)
throw new InvalidParameterException(
String.format("This listing with vin: %s already exist", vin)
);
String postStatement = "START TRANSACTION; " +
this.POST_USER_INVENTORY +
this.POST_USER_INVENTORY_DETAIL +
this.preparePostStatementHelper(images) +
"COMMIT; ";
String userInventoryId = UUID.randomUUID().toString();
jdbcTemplate.update(
connection ->
PreparedStatement ps = connection.prepareStatement(postStatement);
ps.setString(1, userInventoryId);
ps.setString(2, userId);
ps.setString(3, UUID.randomUUID().toString());
ps.setString(4, userInventoryId);
ps.setString(5, vin);
ps.setString(6, price);
ps.setString(7, mileage);
ps.setString(8, color);
for (int i = 0, j = 0; i < images.size(); i++)
ps.setString(9 + j++, UUID.randomUUID().toString());
ps.setString(9 + j++, userInventoryId);
ps.setString(9 + j++, images.get(i));
System.out.println(ps.toString());
return ps;
);
return this.getUserListingsByUserId(userId);
这是控制台为 ps 打印的内容。
START TRANSACTION;
INSERT INTO user_inventories (`id`, `user_id`) VALUES ('db75330e-1da0-455c-850f-22ba08db697e', '7ff0ca63-11e3-4aa4-b5cf-08d9091901fe');
INSERT INTO user_inventory_details (`id`, `user_inventory_id`, `vin`, `price`, `mileage`, `color`) VALUES ('55df5adc-b0c6-4303-9671-1b562fd9a687', 'db75330e-1da0-455c-850f-22ba08db697e', '2FMPK4K99LBA82434', '36,454', '12300', 'silver');
INSERT INTO user_inventory_images (`id`, `user_inventory_id`, `image_url`) VALUES ('17bc4717-9967-4402-a87c-c729d29d7b11', 'db75330e-1da0-455c-850f-22ba08db697e', 'https://www.cstatic-images.com/supersized/in/v1/424056/2FMPK4K99LBA82434/4d915c4f3ea38e2d44d879d143277468.jpg');
INSERT INTO user_inventory_images (`id`, `user_inventory_id`, `image_url`) VALUES ('bd23ec85-edfe-4a46-b0f7-4608f258a84d', 'db75330e-1da0-455c-850f-22ba08db697e', 'https://www.cstatic-images.com/supersized/in/v1/424056/2FMPK4K99LBA82434/d26beabd124e6638c935739f92c056c2.jpg');
INSERT INTO user_inventory_images (`id`, `user_inventory_id`, `image_url`) VALUES ('dc53e3e2-5f4d-4a3c-8cef-3539dee0e873', 'db75330e-1da0-455c-850f-22ba08db697e', 'https://www.cstatic-images.com/supersized/in/v1/424056/2FMPK4K99LBA82434/389ceb910bef8f8255c21d6823b269fe.jpg');
INSERT INTO user_inventory_images (`id`, `user_inventory_id`, `image_url`) VALUES ('9b6201f4-8ae8-4483-b33e-3a61ffa2cb90', 'db75330e-1da0-455c-850f-22ba08db697e', 'https://www.cstatic-images.com/supersized/in/v1/424056/2FMPK4K99LBA82434/7d7e014e4dab59f9026837a37fb0a697.jpg');
COMMIT;
这是jdbc给我的错误
获取数据时出现异常 (/postUserListing):PreparedStatementCallback;糟糕的 SQL 语法 [];嵌套异常是 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 1 行的 'INSERT INTO user_inventories (
id
,user_id
) VALUES ('db75330e-1da0-455c-850f-' 附近使用
我很困惑,因为我在我的 mysql 工作台上键入了相同的 sql 命令,它成功执行并完成了所有插入。但是,当我尝试使用 jdbc 时,它每次都会给我一个 sql 语法错误。 非常感谢您的帮助!
这里是三个常量字段
private final String POST_USER_INVENTORY = "INSERT INTO user_inventories (`id`, `user_id`) VALUES (?, ?); ";
private final String POST_USER_INVENTORY_DETAIL = "INSERT INTO user_inventory_details (`id`, `user_inventory_id`, `vin`, `price`, `mileage`, `color`) VALUES (?, ?, ?, ?, ?, ?); ";
private final String POST_USER_INVENTORY_IMAGES = "INSERT INTO user_inventory_images (`id`, `user_inventory_id`, `image_url`) VALUES (?, ?, ?); ";
还有一个私有的辅助方法
private String preparePostStatementHelper(List<String> images)
String postImagesStatement = "";
for (int i = 0; i < images.size(); i++)
postImagesStatement += this.POST_USER_INVENTORY_IMAGES;
return postImagesStatement;
【问题讨论】:
您可以尝试删除列名周围的引号吗? 你的意思是这个`反勾号? 是的,请尝试删除它们。 刚试过,同样的问题 执行查询时出错(ExceptionWhileDataFetching):获取数据时出现异常(/postUserListing):PreparedStatementCallback;糟糕的 SQL 语法 [];嵌套异常是 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册,以获取在第 1 行的“INSERT INTO user_inventories (id, user_id) VALUES ('abd9204d-8b07-494d-9c5f-a305') 附近使用的正确语法 【参考方案1】:您将多个语句作为一个发送。错误指的是第一个';'。
不要发送START TRANSACTION;
,而是调用Connection.setAutoCommit(false);
单独发送每个插入语句。
不要发送COMMIT;
,而是调用Connection.commit();
,然后是Connection.setAutoCommit(true);
【讨论】:
还能在jdbcTemplate.update(connection -> )里面完成吗?不确定语法 知道了,我只是做 Connection con = jdbcTemplate.getDataSource().getConnection() 来获取连接并设置其余部分。谢谢以上是关于我现在用sql建立数据库表 为啥老是提示语法错误的主要内容,如果未能解决你的问题,请参考以下文章
以下SQL中语句,为啥老是报错( '*' 附近有语法错误)??
用SQL语句将两个结构相同的表合并为一个表,提示语法错误,请教。
SQL 2005 用IP连接时 提示发生内部连接致命错误 这是为啥?我重装了SQL server2005后还是这样 求解答