如果在使用mysql数据库的简单java应用程序中输入超过1个单词,则用户输入会产生错误

zaqlnxep  于 2021-07-14  发布在  Java
关注(0)|答案(0)|浏览(175)

我只是在学习sql,这是我的第一个任务,将它整合到java应用程序中。我有问题,由用户输入多个字,它打破了。如果我只在word上输入没有空格的单词,一切都会很好。我真的很感激你的帮助!
下面是一些错误的截图(可能与扫描仪有关,但就我的生命而言,我无法修复它!)代码如下。
如果我键入2个单词,则会同时显示以下2个.next()。
但如果我只打一个字,它就不会断。
按标题“搜索”也一样,如果键入多个单词,则会出现以下错误。

  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.PreparedStatement;
  4. import java.sql.SQLException;
  5. import java.sql.ResultSet;
  6. import java.sql.Statement;
  7. import java.util.*;
  8. // This is a simple bookstore application that allows the user to add, update,
  9. // delete and search for books in the MySQL database.
  10. // Book class
  11. class Books {
  12. public int id;
  13. public String title;
  14. public String author;
  15. public int qty;
  16. public String search;
  17. public Books() {
  18. }
  19. public Books(int id, String title, String author, int qty) {
  20. this.id = id;
  21. this.title = title;
  22. this.author = author;
  23. this.qty = qty;
  24. }
  25. }
  26. // BookStore Class
  27. public class BookStore {
  28. public int choice;
  29. static int id = 0;
  30. static String title = "";
  31. static String author = "";
  32. static int qty = 0;
  33. public static void main(String[] args) throws SQLException {
  34. boolean quit = false;
  35. Scanner input = new Scanner(System.in);
  36. int menu = 0;
  37. System.out.println("Betty's Book Store\n-----------------------------");
  38. // SQL details
  39. String url = "jdbc:mysql://localhost:3306/ebookstore_db?useSSL=false";
  40. String user = "otheruser";
  41. String password = "swordfish";
  42. PreparedStatement myStmt = null;
  43. Connection myConn = null;
  44. do {
  45. // Menu
  46. System.out.println();
  47. System.out.println("1. Enter book");
  48. System.out.println("2. Update book");
  49. System.out.println("3. Delete book");
  50. System.out.println("4. Search books");
  51. System.out.println("5. Exit");
  52. System.out.print("\nPlease enter your choice: ");
  53. menu = input.nextInt();
  54. System.out.println();
  55. switch (menu) {
  56. case 1:
  57. System.out.println("1. Enter book\n-----------------------------");
  58. try {
  59. // Add a new book
  60. System.out.print("Book ID: ");
  61. int id = input.nextInt();
  62. System.out.print("Book Title: ");
  63. String title = input.next();
  64. System.out.print("Book Author: ");
  65. String author = input.next();
  66. System.out.print("Quantity: ");
  67. int qty = input.nextInt();
  68. // 1. Get a connection to database
  69. myConn = DriverManager.getConnection(url, user, password);
  70. // 2. Create a statement
  71. String sql = "INSERT INTO books " + " (id, title, author, qty)" + " values (?, ?, ?, ?)";
  72. myStmt = myConn.prepareStatement(sql);
  73. // Set parameter values
  74. myStmt.setInt(1, id);
  75. myStmt.setString(2, title);
  76. myStmt.setString(3, author);
  77. myStmt.setInt(4, qty);
  78. // 3. Execute SQL query
  79. myStmt.executeUpdate();
  80. System.out.println("Insert complete.");
  81. printAllFromTable(myStmt);
  82. } catch (Exception exc) {
  83. exc.printStackTrace();
  84. } finally {
  85. if (myStmt != null) {
  86. myStmt.close();
  87. }
  88. if (myConn != null) {
  89. myConn.close();
  90. }
  91. }
  92. break;
  93. case 2:
  94. // Update a book's data
  95. System.out.println("2. Update book\n-----------------------------");
  96. try {
  97. // Search for book by ID
  98. System.out.print("Enter Book ID: ");
  99. int searchId = input.nextInt();
  100. int id = searchId;
  101. ResultSet results;
  102. // 1. Get a connection to database
  103. myConn = DriverManager.getConnection(url, user, password);
  104. // 2. Create a statement
  105. String sql = "SELECT * FROM books WHERE id = ?";
  106. myStmt = myConn.prepareStatement(sql);
  107. // Set parameter values
  108. myStmt.setInt(1, id);
  109. // Set parameter values
  110. myStmt.setInt(1, id);
  111. // 3. Execute SQL query
  112. results = myStmt.executeQuery();
  113. // Loop over the results, printing them all.
  114. while (results.next()) {
  115. System.out.println(results.getInt("id") + ", " + results.getString("title") + ", "
  116. + results.getString("author") + ", " + results.getInt("qty") + "\n");
  117. }
  118. // Close up our connections
  119. results.close();
  120. // Sub menu for updating book data after selecting ID
  121. System.out.println("1. Update ID");
  122. System.out.println("2. Update Title");
  123. System.out.println("3. Update Author");
  124. System.out.println("4. Update Quantity");
  125. System.out.println("5. Main menu");
  126. do {
  127. System.out.print("\nPlease enter your choice: ");
  128. menu = input.nextInt();
  129. System.out.println();
  130. switch (menu) {
  131. case 1:
  132. try {
  133. // Update Book ID
  134. System.out.print("Enter New ID: ");
  135. int updateId = input.nextInt();
  136. int id2 = updateId;
  137. // 1. Get a connection to database
  138. myConn = DriverManager.getConnection(url, user, password);
  139. // 2. Create a statement
  140. String sql1 = "UPDATE books SET id = ? WHERE id = ?";
  141. myStmt = myConn.prepareStatement(sql1);
  142. // Set parameter values
  143. myStmt.setInt(1, id2);
  144. myStmt.setInt(2, id);
  145. // 3. Execute SQL query
  146. myStmt.execute();
  147. System.out.println("ID updated.");
  148. printAllFromTable(myStmt);
  149. } catch (Exception exc) {
  150. exc.printStackTrace();
  151. } finally {
  152. if (myStmt != null) {
  153. myStmt.close();
  154. }
  155. if (myConn != null) {
  156. myConn.close();
  157. }
  158. }
  159. break;
  160. case 2:
  161. try {
  162. // Update Book title
  163. System.out.print("Enter New Title: ");
  164. String title = input.next();
  165. // 1. Get a connection to database
  166. myConn = DriverManager.getConnection(url, user, password);
  167. // 2. Create a statement
  168. String sql1 = "UPDATE books SET title = ? WHERE id = ?";
  169. myStmt = myConn.prepareStatement(sql1);
  170. // Set parameter values
  171. myStmt.setString(1, title);
  172. myStmt.setInt(2, id);
  173. // 3. Execute SQL query
  174. myStmt.execute();
  175. System.out.println("Title updated.");
  176. printAllFromTable(myStmt);
  177. } catch (Exception exc) {
  178. exc.printStackTrace();
  179. } finally {
  180. if (myStmt != null) {
  181. myStmt.close();
  182. }
  183. if (myConn != null) {
  184. myConn.close();
  185. }
  186. }
  187. break;
  188. case 3:
  189. try {
  190. // Update Book Author
  191. System.out.print("Enter New Author: ");
  192. String author = input.next();
  193. // 1. Get a connection to database
  194. myConn = DriverManager.getConnection(url, user, password);
  195. // 2. Create a statement
  196. String sql1 = "UPDATE books SET author = ? WHERE id = ?";
  197. myStmt = myConn.prepareStatement(sql1);
  198. // Set parameter values
  199. myStmt.setString(1, author);
  200. myStmt.setInt(2, id);
  201. // 3. Execute SQL query
  202. myStmt.execute();
  203. System.out.println("Autor updated.");
  204. printAllFromTable(myStmt);
  205. } catch (Exception exc) {
  206. exc.printStackTrace();
  207. } finally {
  208. if (myStmt != null) {
  209. myStmt.close();
  210. }
  211. if (myConn != null) {
  212. myConn.close();
  213. }
  214. }
  215. break;
  216. case 4:
  217. try {
  218. // Update Book Quantity
  219. System.out.print("Enter New Quantity: ");
  220. int qty = input.nextInt();
  221. // 1. Get a connection to database
  222. myConn = DriverManager.getConnection(url, user, password);
  223. // 2. Create a statement
  224. String sql1 = "UPDATE books SET qty = ? WHERE id = ?";
  225. myStmt = myConn.prepareStatement(sql1);
  226. // Set parameter values
  227. myStmt.setInt(1, qty);
  228. myStmt.setInt(2, id);
  229. // 3. Execute SQL query
  230. myStmt.execute();
  231. System.out.println("Quantity updated.");
  232. printAllFromTable(myStmt);
  233. } catch (Exception exc) {
  234. exc.printStackTrace();
  235. } finally {
  236. if (myStmt != null) {
  237. myStmt.close();
  238. }
  239. if (myConn != null) {
  240. myConn.close();
  241. }
  242. }
  243. break;
  244. case 5:
  245. break;
  246. default:
  247. System.out.println("Invalid Entry");
  248. }
  249. } while (menu != 5);
  250. } catch (Exception exc) {
  251. exc.printStackTrace();
  252. } finally {
  253. if (myStmt != null) {
  254. myStmt.close();
  255. }
  256. if (myConn != null) {
  257. myConn.close();
  258. }
  259. }
  260. break;
  261. case 3:
  262. // Delete a book from the database
  263. System.out.println("3. Delete book\n-----------------------------");
  264. try {
  265. // Search
  266. System.out.print("Enter Book ID to delete: ");
  267. int searchId = input.nextInt();
  268. int id = searchId;
  269. // 1. Get a connection to database
  270. myConn = DriverManager.getConnection(url, user, password);
  271. // 2. Create a statement
  272. String sql = "DELETE FROM books WHERE id = ?";
  273. myStmt = myConn.prepareStatement(sql);
  274. // Set parameter values
  275. myStmt.setInt(1, id);
  276. // 3. Execute SQL query
  277. myStmt.executeUpdate();
  278. System.out.println("Delete complete.\n");
  279. // printAllFromTable(myStmt);
  280. } catch (Exception exc) {
  281. exc.printStackTrace();
  282. } finally {
  283. if (myStmt != null) {
  284. myStmt.close();
  285. }
  286. if (myConn != null) {
  287. myConn.close();
  288. }
  289. }
  290. break;
  291. case 4:
  292. // Search for a book in the database
  293. System.out.println("4. Search books\n-----------------------------");
  294. System.out.println();
  295. do {
  296. // Sub menu for searching by ID, title or author
  297. System.out.println("1. Enter ID");
  298. System.out.println("2. Enter Title");
  299. System.out.println("3. Enter Author");
  300. System.out.println("4. Main menu");
  301. System.out.print("\nPlease enter your choice: ");
  302. menu = input.nextInt();
  303. System.out.println();
  304. switch (menu) {
  305. case 1:
  306. try {
  307. // Search by book id
  308. System.out.print("Enter Book ID: ");
  309. int searchId = input.nextInt();
  310. int id = searchId;
  311. ResultSet results;
  312. // 1. Get a connection to database
  313. myConn = DriverManager.getConnection(url, user, password);
  314. // 2. Create a statement
  315. String sql = "SELECT * FROM books WHERE id = ?";
  316. myStmt = myConn.prepareStatement(sql);
  317. // Set parameter values
  318. myStmt.setInt(1, id);
  319. // 3. Execute SQL query
  320. results = myStmt.executeQuery();
  321. // Loop over the results, printing them all.
  322. while (results.next()) {
  323. System.out.println(results.getInt("id") + ", " + results.getString("title") + ", "
  324. + results.getString("author") + ", " + results.getInt("qty"));
  325. }
  326. } catch (Exception exc) {
  327. exc.printStackTrace();
  328. } finally {
  329. if (myStmt != null) {
  330. myStmt.close();
  331. }
  332. if (myConn != null) {
  333. myConn.close();
  334. }
  335. }
  336. break;
  337. case 2:
  338. try {
  339. // Search by book title
  340. System.out.print("Enter Book Title: ");
  341. String searchTitle = input.next();
  342. String title = searchTitle;
  343. ResultSet results;
  344. // 1. Get a connection to database
  345. myConn = DriverManager.getConnection(url, user, password);
  346. // 2. Create a statement
  347. String sql = "SELECT * FROM books WHERE title = ?";
  348. myStmt = myConn.prepareStatement(sql);
  349. // Set parameter values
  350. myStmt.setString(1, title);
  351. // 3. Execute SQL query
  352. results = myStmt.executeQuery();
  353. // Loop over the results, printing them all.
  354. while (results.next()) {
  355. System.out.println(results.getInt("id") + ", " + results.getString("title") + ", "
  356. + results.getString("author") + ", " + results.getInt("qty"));
  357. }
  358. } catch (Exception exc) {
  359. exc.printStackTrace();
  360. } finally {
  361. if (myStmt != null) {
  362. myStmt.close();
  363. }
  364. if (myConn != null) {
  365. myConn.close();
  366. }
  367. }
  368. break;
  369. case 3:
  370. try {
  371. // Search by book Author
  372. System.out.print("Enter Author: ");
  373. String searchAuthor = input.next();
  374. String title = searchAuthor;
  375. ResultSet results;
  376. // 1. Get a connection to database
  377. myConn = DriverManager.getConnection(url, user, password);
  378. // 2. Create a statement
  379. String sql = "SELECT * FROM books WHERE author = ?";
  380. myStmt = myConn.prepareStatement(sql);
  381. // Set parameter values
  382. myStmt.setString(1, title);
  383. // 3. Execute SQL query
  384. results = myStmt.executeQuery();
  385. // Loop over the results, printing them all.
  386. while (results.next()) {
  387. System.out.println(results.getInt("id") + ", " + results.getString("title") + ", "
  388. + results.getString("author") + ", " + results.getInt("qty"));
  389. }
  390. } catch (Exception exc) {
  391. exc.printStackTrace();
  392. } finally {
  393. if (myStmt != null) {
  394. myStmt.close();
  395. }
  396. if (myConn != null) {
  397. myConn.close();
  398. }
  399. }
  400. break;
  401. case 4:
  402. break;
  403. default:
  404. System.out.println("Invalid Entry");
  405. }
  406. } while (menu != 4);
  407. break;
  408. case 5:
  409. // Exits the program
  410. System.out.println("Exiting...");
  411. quit = true;
  412. break;
  413. default:
  414. System.out.println("Invalid Entry");
  415. }
  416. } while (!quit);
  417. if (input != null) {
  418. input.close();
  419. }
  420. }
  421. /**
  422. * Method printing all values in all rows. Takes a statement to try to avoid
  423. * spreading DB access too far.
  424. *
  425. * @param a statement on an existing connection
  426. * @throws SQLException
  427. */
  428. public static void printAllFromTable(Statement statement) throws SQLException {
  429. ResultSet results = statement.executeQuery("SELECT id, title, author, qty FROM books");
  430. while (results.next()) {
  431. System.out.println(results.getInt("id") + ", " + results.getString("title") + ", "
  432. + results.getString("author") + ", " + results.getInt("qty"));
  433. }
  434. }
  435. }

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题