mboost-dp1

Java + MS Access SQL


Gå til bund
Gravatar #1 - Barkane
17. maj 2010 20:22
private void addRecipe()
{
Scanner keyboard = new Scanner(System.in);
System.out.print("Recipe name: ");
String name = keyboard.next();
System.out.print("Ingredients: ");
String ingredients = keyboard.next();
String sql = "INSERT INTO RECIPESTABLE(RECIPENAME, INGREDIENTS)" +
"VALUES('name','ingredients')";
System.out.println("\nAdding a recipe : ");

try
{
Statement statement = con.createStatement();
int result = statement.executeUpdate(sql);
System.out.println(" Added " + result + " recipe(s).");
}
catch (Exception ex)
{
System.out.println("Error adding a recipe!");
System.out.println(ex);
}
}


Hvordan indsætter jeg variablerne name og ingredients til "VALUES" ?
Gravatar #2 - zin
17. maj 2010 21:06
String sql = "INSERT INTO RECIPESTABLE(RECIPENAME, INGREDIENTS)" +
"VALUES('"+name+"','"+ingredients+"')";

Bemærk at du bør påføre noget check om name og ingredients er strings. :-)
Gravatar #3 - Barkane
17. maj 2010 21:13
ZiN (2) skrev:
Bemærk at du bør påføre noget check om name og ingredients er strings. :-)

I databasen? RECIPENAME'ens datatype er Text og INGREDIENTS'ens datatype er memo. Der burde ikke være noget problem.
Gravatar #4 - squad2nd
17. maj 2010 21:18
Hmmm... måske noget ala det her. Jeg har lavet et par få ændringer så du fx kan skrive en komplet ingredientsliste... istedet. Afslut listen med '.'



import java.util.Scanner;

private void addRecipe()
{
Scanner keyboard = new Scanner(System.in);
System.out.print("Recipe name: ");
String name = keyboard.nextLine();

String lineInput = "";
StringBuilder sb = new StringBuilder();

String ingredientString;

int ingrCnt = 1;
while(true)
{
System.out.print("Ingredient " + ingrCnt + ": ");
lineInput = keyboard.nextLine();
if(lineInput.equals("."))
{
ingredientString = sb.toString().substring(0, sb.toString().length()-1);
break;
}
sb.append(lineInput + ",");
ingrCnt++;
}




String sql = "INSERT INTO RECIPESTABLE(RECIPENAME, INGREDIENTS) " +
"VALUES ('" + name + "', '" + ingredientString + "')";
System.out.println("\nAdding a recipe : ");

System.out.println(sql);

try
{
Statement statement = con.createStatement();
int result = statement.executeUpdate(sql);

System.out.println(" Added " + result + " recipe(s).");
}
catch (Exception ex)
{
System.out.println("Error adding a recipe!");
System.out.println(ex);
}
}

Gravatar #5 - Barkane
17. maj 2010 21:33
StringBuilder sb = new StringBuilder();

Hvad skal der stå inde i den metode så?
Gravatar #6 - squad2nd
17. maj 2010 21:36
#5 Ikke forstået?
Gravatar #7 - Barkane
17. maj 2010 21:38
My bad.

Det er første gang jeg ser stringbuilder... Jeg læser om det lige nu på java.sun.com
Gravatar #8 - zin
17. maj 2010 21:40
#3: Nej i koden - som #4 prøver. :-)
Gravatar #9 - squad2nd
17. maj 2010 21:43
#2
For god ordens skyld, så kyler JDBC API'et selv en SQLException hvis han prøver at skrive en string til en column der forventer en int fx...
Gravatar #10 - Barkane
17. maj 2010 21:44
StringBuilder sb = new StringBuilder() fejler i netbeans.

Den siger:

cannot find symbol
symbol: method StringBuilder(java.lang.String)
Gravatar #11 - squad2nd
17. maj 2010 21:54
#10

Du har vel ikke andre JDK's installeret end 1.5 og op?
Tjek om du builder imod et ældre JDK, og hvis du rent faktisk builder imod JDK 5, check om du bruger compiler compliance til en ældre version af JDK (fx 1.3 / 1.4).
Gravatar #12 - Barkane
17. maj 2010 22:02
Aah, i netbeans stod der: <Use Java Platform defined in Project>
Efter at have ændret den til 1.6 så var problemet væk.
Gravatar #13 - squad2nd
17. maj 2010 22:03
#12

Godt... fordi jeg kan ikke tåle fejlbeskeder i Java. Platformen slider nok på mine nerver i forvejen! :-P
Gravatar #14 - Barkane
17. maj 2010 22:05
Tak for hjælpen. Jeg har lært mere end jeg har regnet med for i dag :D
Gravatar #15 - squad2nd
17. maj 2010 22:06
#14

You're welcome! :)
Gravatar #16 - Windcape
17. maj 2010 22:21
ZiN (2) skrev:
String sql = "INSERT INTO RECIPESTABLE(RECIPENAME, INGREDIENTS)" +
"VALUES('"+name+"','"+ingredients+"')";

Bemærk at du bør påføre noget check om name og ingredients er strings. :-)
NOOOOOOO!

http://java.sun.com/docs/books/tutorial/jdbc/basic...

#0

Læs overstående link. Gerne to gange.
Gravatar #17 - arne_v
17. maj 2010 22:31
#StringBuilder

Den klasse blev tilføjet i Java 1.5 - for ældre Java versioner skal man bruge StringBuffer klassen.

De har præcis samme funktionalitet, men StringBuilder er usynkroniseret mens StringBuffer er synkroniseret.

Hvis man er på 1.5/1.6/1.7beta, så bør man bruge StringBuilder.
Gravatar #18 - arne_v
17. maj 2010 22:33
#JDBC brug

Og så er jeg helt enig med windcape i at der bør bruges PreparedStatement.

Men derfor kan man godt alligevel lave noget data validering.
Gravatar #19 - squad2nd
17. maj 2010 22:36
#16

Åh Gud!! Nej!!! *bider fingre* Vi bør optimere!!! *bider fingre* ... det vigtigste er at hans eksempel fyrer afsted som en raket, end at han kan forstå essencen! *bider fingre*... vi må optimere...

Hans spørgsmål var ikke "hvordan kan jeg få mine SQL forespørgsler, som faktisk ikke burde ligge sammen med logikken, men enten måske et DAO eller Hibernate object, til at køre hurtigere?"

- Læs hans primære spørgsmål. Gerne to gange.





Gravatar #20 - arne_v
17. maj 2010 22:37
#database

MS Access betyder formentligt JDBC-ODBC bridge.

Den er noget forfærdeligt crap.

Hvilket er god grund til at vælge en anden database som kommer med en type 4 (eller til nød en type 2) JDBC driver.

Der er masser af gode embedded databaser til Java.

Derby (som kommer med Java), HSQLDB, H2, FireBird etc..

Eneste grund til at bruge MS Access er hvis databasen skal bruges af en anden app som har stærke præferancer for MS Access.
Gravatar #21 - arne_v
17. maj 2010 22:38
#19

Brug af PreparedStatement drejer sig ikke kun om performance men også bedre håndtering af data - strenge med singel quotes i og datoer.
Gravatar #22 - Windcape
17. maj 2010 22:43
squad2nd (19) skrev:
Læs hans primære spørgsmål. Gerne to gange.
Han spørger jo netop om brugen af variabler i SQL!

Det er præcist hvad statements er til for!
Gravatar #23 - arne_v
19. maj 2010 17:44
#21

Plus binære data.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login