2018-10-24, 08:38
  #1
Medlem
Tjena! Var svårt hur jag skulle formulera mig i rubriken men ska förklara mera!

Jag vill skriva in ett SQL commando i mitt javaprogram som har connection med min SQL databas.

Alltså använd ett Javaprogram för att be användaren att skriva in ett SQL-kommando på konsolen. Resultatet (eller felmeddelande) skrivs sedan ut på konsolen.

Såhär ser min kod ut nu

Kod:
package jdbcdemo;
import java.sql.*;
import java.util.Scanner;

public class 
testDriver {

    public static 
void main(String[]args) {
            
try {
Scanner input=new Scanner (System.in);
String input1=input.nextLine();

String url="jdbc:mysql://localhost:3306/testlabb3?autoReconnect=true&useSSL=false";
String password="hej123";
String userName="root";

//Skapa kontakt med databas
Connection myConn=DriverManager.getConnection(url,userName,password);

//Skapa statement så man kan skriva ut
Statement myStatement=myConn.createStatement();

//här allt ska komma med resultset men vet ej hur jag ska kombinera de med att skriva i consol..

}

}catch(
SQLException e) {e.printStackTrace();}
                                
   }



Min databas har två tables. Ett som heter
city
Columner: CityID och CityName

Det andra tablet heter customer
Columer:CustomerId,CityId,CustomerName,CustomerLna me
__________________
Senast redigerad av Douknowme 2018-10-24 kl. 08:52.
Citera
2018-10-24, 09:54
  #2
Medlem
fittslickarns avatar
Vad är frågan? Du vet inte hur man ställer fråga mot DB?

Här är en enkel tutorial med allt du behöver veta.
http://www.ntu.edu.sg/home/ehchua/pr...dbc_basic.html

Kod:
Statement stmt = conn.createStatement();
      ) {
         // Step 3: Execute a SQL SELECT query, the query result
         //  is returned in a 'ResultSet' object.
         String strSelect = "select title, price, qty from books";
         System.out.println("The SQL query is: " + strSelect); // Echo For debugging
         System.out.println();
 
         ResultSet rset = stmt.executeQuery(strSelect);
 
         // Step 4: Process the ResultSet by scrolling the cursor forward via next().
         //  For each row, retrieve the contents of the cells with getXxx(columnName).
         System.out.println("The records selected are:");
         int rowCount = 0;
         while(rset.next()) {   // Move the cursor to the next row, return false if no more row
            String title = rset.getString("title");
            double price = rset.getDouble("price");
            int    qty   = rset.getInt("qty");
            System.out.println(title + ", " + price + ", " + qty);
            ++rowCount;
         }
Citera
2018-10-24, 12:06
  #3
Medlem
kjellbrels avatar
Citat:
Ursprungligen postat av Douknowme
Alltså använd ett Javaprogram för att be användaren att skriva in ett SQL-kommando på konsolen. Resultatet (eller felmeddelande) skrivs sedan ut på konsolen.
Nu har du redan fått lite tips om hur du skall lösa detta, men är du säker på att du vill låta användaren exekvera statements som root i din databas helt fritt? Är det OK om användaren exempelvis vill köra detta?
Kod:
DROP TABLE customer;
Citera
2018-10-24, 12:12
  #4
Medlem
Det som skrivits kan jag. Raderade bara de för att det var inte så jag tänkte de. Egentligen såg min kod ut såhär

Kod:
package jdbcdemo;
import java.sql.*;
import java.util.Scanner;

public class 
testDriver {

    public static 
void main(String[]args) {
            
try {
Scanner input=new Scanner (System.in);
String input1=input.nextLine();

String url="jdbc:mysql://localhost:3306/geografi?autoReconnect=true&useSSL=false";
String password="hej123";
String userName="root";

//Skapa kontakt med databas
Connection myConn=DriverManager.getConnection(url,userName,password);

//Skapa statement så man kan skriva ut
Statement myStatement=myConn.createStatement();

//Skapa vilken table jag vill ta kontakt med
ResultSet myRes=myStatement.executeQuery("select * from geografi.labb3 Where land='Sverige' or land='Finland'");

//Skriver ut info
while(myRes.next()) {
System.out.println("ID:"+myRes.getString("id")+", "+"Land:"+myRes.getString("land")+", "+"Befolkning::"+myRes.getString("befolkning"));
}

}catch(
SQLException e) {e.printStackTrace();}
                        
        
}



Det jag vill är ja att man ska skapa en scanner och skriva in ett SQL commando i consolen och sen skrivs resultatet eller felmeddelandet ut.
Förstår du hur jag menar?
Citera
2018-10-24, 17:08
  #5
Medlem
Citat:
Ursprungligen postat av Douknowme
Det som skrivits kan jag. Raderade bara de för att det var inte så jag tänkte de. Egentligen såg min kod ut såhär

Kod:
package jdbcdemo;
import java.sql.*;
import java.util.Scanner;

public class 
testDriver {

    public static 
void main(String[]args) {
            
try {
Scanner input=new Scanner (System.in);
String input1=input.nextLine();

String url="jdbc:mysql://localhost:3306/geografi?autoReconnect=true&useSSL=false";
String password="hej123";
String userName="root";

//Skapa kontakt med databas
Connection myConn=DriverManager.getConnection(url,userName,password);

//Skapa statement så man kan skriva ut
Statement myStatement=myConn.createStatement();

//Skapa vilken table jag vill ta kontakt med
ResultSet myRes=myStatement.executeQuery("select * from geografi.labb3 Where land='Sverige' or land='Finland'");

//Skriver ut info
while(myRes.next()) {
System.out.println("ID:"+myRes.getString("id")+", "+"Land:"+myRes.getString("land")+", "+"Befolkning::"+myRes.getString("befolkning"));
}

}catch(
SQLException e) {e.printStackTrace();}
                        
        
}



Det jag vill är ja att man ska skapa en scanner och skriva in ett SQL commando i consolen och sen skrivs resultatet eller felmeddelandet ut.
Förstår du hur jag menar?
Vad är det som går fel när du gör det då? Du har input1 som innehåller ditt SQL-statement. Kör det med executeQuery så får du ett ResultSet tillbaks som du kan skriva ut.
Citera
2018-10-24, 21:29
  #6
Moderator
Protons avatar
Du registrerar inte din driver nånstans, gissar att du inte får ut allt för mycket data ur din databas?

Har du kollat vad Oracle själva säger om att ansluta till en mysql-datakälla?

https://dev.mysql.com/doc/connector-...ermanager.html
__________________
Senast redigerad av Proton 2018-10-24 kl. 21:32.
Citera
2018-10-25, 07:19
  #7
Medlem
Citat:
Ursprungligen postat av e7andy
Vad är det som går fel när du gör det då? Du har input1 som innehåller ditt SQL-statement. Kör det med executeQuery så får du ett ResultSet tillbaks som du kan skriva ut.

Det är inget som går fel utan jag har bara inte den blekaste hur jag ska göra.
Jag kan få ut all data jag vill ha, det är inga som helst problem. Men att skriva in ett SQL commando avn användaren, det jag inte fattar. Vet att man kanske ska använda sig av en scanner men mer vet jag ej..
Citera
2018-10-25, 07:21
  #8
Medlem
Citat:
Ursprungligen postat av Proton
Du registrerar inte din driver nånstans, gissar att du inte får ut allt för mycket data ur din databas?

Har du kollat vad Oracle själva säger om att ansluta till en mysql-datakälla?

https://dev.mysql.com/doc/connector-...ermanager.html

Vad menar du med att jag inte registrerar min driver?
Jag kan få ut det jag vill ur min databas, det är förvisso en väldigt liten men jag kan få ut det jag vill!
Men om jag gjort något tokigt så hade det varit toppen om du förklarade mer om drivern!
Citera
2018-10-25, 07:41
  #9
Moderator
Protons avatar
Citat:
Ursprungligen postat av Douknowme
Vad menar du med att jag inte registrerar min driver?
Jag kan få ut det jag vill ur min databas, det är förvisso en väldigt liten men jag kan få ut det jag vill!
Men om jag gjort något tokigt så hade det varit toppen om du förklarade mer om drivern!
Det jag menar är att din kod skiljer sig avsevärt från Oracles dito, men funkar det är det ju fine.

Förstår dock inte varför du börjar blanda in databaser om du inte har grepp om språkets mer basala delar.

Vad är det du inte förstår med Scannern? I sin enklaste form ser det ju ut nåt wsånt här:

Kod:
Scanner scan = new Scanner(System.in);
String str scan.nextLine();
System.out.println(str); 

I ditt fall blir det ju att stoppa i str i ditt statement istället för din hårdkodade sql du har nu.

Har du läst det som står på sidan jag länkade till?
Varför inte?
Citera
2018-10-25, 18:51
  #10
Medlem
Citat:
Ursprungligen postat av Douknowme
Det är inget som går fel utan jag har bara inte den blekaste hur jag ska göra.
Jag kan få ut all data jag vill ha, det är inga som helst problem. Men att skriva in ett SQL commando avn användaren, det jag inte fattar. Vet att man kanske ska använda sig av en scanner men mer vet jag ej..
Du har gjort en scanner som jag tycker ser ut att fungera. Använd en debugger för att se vad som läses in eller gör en println som Proton skriver. Att bara skriva ut det är oftast det enklaste.

Ta den text som lästs in och kör den med executeQuery:
ResultSet myRes=myStatement.executeQuery(input1);

I myRes har du sen ditt resultset som du kan skriva ut.

Angående att registera Drivers så behöver man inte göra det längre, men om man har en gammal (pre JDBC 4-driver) så behöver man det. Det skadar inte att göra det eftersom alla Drivers inte är korrekt konstruerade.
Citera
2018-10-30, 11:56
  #11
Medlem
Citat:
Ursprungligen postat av e7andy
Du har gjort en scanner som jag tycker ser ut att fungera. Använd en debugger för att se vad som läses in eller gör en println som Proton skriver. Att bara skriva ut det är oftast det enklaste.

Ta den text som lästs in och kör den med executeQuery:
ResultSet myRes=myStatement.executeQuery(input1);

I myRes har du sen ditt resultset som du kan skriva ut.

Angående att registera Drivers så behöver man inte göra det längre, men om man har en gammal (pre JDBC 4-driver) så behöver man det. Det skadar inte att göra det eftersom alla Drivers inte är korrekt konstruerade.

yes tack så mycket! Löste det Var enklare än jag trodde haha!
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in