J2ME: Łączenie z bazą (MySQL) lub www

J2ME: Łączenie z bazą (MySQL) lub www
BO
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 11 lat
  • Postów:1
0

Witajcie,

Staram się stworzyć prostą aplikację, która umożliwi mi wysłanie pewnych wartości do bazy.
Jako, że z javą nie miałem do czynienia to nie wielę mogę zdziałać. Na chwilę obecną udało mi się skleić to ze znalezionych kodów.

Kopiuj
/*
 * clsCanvas.java
 */

package MyGame;

import java.io.IOException;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.Sprite;



public class clsCanvas extends GameCanvas implements Runnable {
private boolean isRunning = true;    
private Graphics g;
private midMain fParent;

private Sprite y, x, prog; // obiekty typu sprite do zarzadzania naszymi "bohaterami" :D:D
private Image yImg, xImg, progImg; // obrazki z kwadratami
private LayerManager lm; // do zarz?dzania rysowanymi na ekranie warstwami
private int yX, yY; // aktualna pozycja gracza
private int xX, xY; // aktualna pozycja przeciwnika
private int progX, progY;
    /** Creates a new instance of clsCanvas */
    public clsCanvas(midMain m) throws IOException {
        super(true);
        fParent = m;
        
yImg = Image.createImage("/a.png"); // przypisujemy narysowany obrazek do zmiennej
xImg = Image.createImage("/b.png"); // to samo co wyzej
progImg = Image.createImage("/prog.png");
y = new Sprite(yImg, yImg.getWidth(), yImg.getHeight()); // tworzymy obiekt typu sprite przypisujac mu narysowana graficzke jako pierwszy parametr
x = new Sprite(xImg, xImg.getWidth(), xImg.getHeight()); // drugi oraz trzeci parametr to jak sie mozna domyslec szerokosc i wysokosc sprite'a :P
prog = new Sprite(progImg, progImg.getWidth(),progImg.getHeight());

yX = (this.getWidth() / 2) - (y.getWidth() / 2); // ustawmy naszego gracza na srodku ekranu
yY = (this.getHeight() - (y.getHeight() / 2));

xX = ((this.getWidth() / 2)- (y.getWidth() / 2)); // a przeciwnika w gornym lewym rogu
xY = 3;

progX = 0;
progY = 0;

lm = new LayerManager(); // utworzenie obiektu zarzadzajacego warstwami
lm.append(y); // dodajemy nowe warstwy
lm.append(x);
lm.append(prog);

this.setFullScreenMode(true); // wyswietlenie gry na pelnym ekranie telefonu
    
    }
    
    public void start(){
        Thread runner = new Thread(this);
        runner.start();
    }

    public void run() {
       int iKey = 0; 
       g = getGraphics();
       while(isRunning){
           
          // iKey = getKeyStates();
           
           //if ((iKey & GameCanvas.FIRE_PRESSED) != 0){
           //    isRunning = false;
          // }
           
           //set drawing color to black
           g.setColor(0x000000);
           //fill the whole screen
           g.fillRect(0, 0, getWidth(), getHeight());
           // set drawing color to white
         int klawisz = this.getKeyStates(); // sprawdzamy czy nacisnieto ktorys z przyciskow

if ((klawisz & LEFT_PRESSED ) != 0){ // nacisnieto klawisz w lewo
xX-=2; // skoro gracz chce isc w lewo to musimy zmodyfikowac jego pozycje poprzez zmniejszenie wartosci X jego pozycji
}
else if ((klawisz & RIGHT_PRESSED ) != 0){ // itd.
xX+=2;
}
else if ((klawisz & UP_PRESSED) != 0){ // itp.
yY-=2;
}
else if ((klawisz & DOWN_PRESSED) != 0){ /// ... :P
yY+=2;
}
this.y.setPosition(yX, yY); // ustawienie gracza w pozycji pX, pY
this.x.setPosition(xX, xY); // ustawienie przeciwnika w pozycji eX, eY
this.prog.setPosition(progX, progX);
this.g.setColor(0xFFFFFF);
this.g.fillRect(0, 0, getWidth(), getHeight());

this.lm.paint(g, 0, 0); // przekazanie wszystkich warstw do pamieci
           flushGraphics();
           
           try{
               Thread.sleep(10);
           } catch (Exception ex){
               
           }
       }
       g = null;
       fParent.destroyApp(false);
       fParent = null;
    }
 
}

Teraz w miejsca if'ów ( if ((klawisz & LEFT_PRESSED ) ) muszę wkleić - i tu pojawia się jedno z dwóch:
a) połączenie z bazą MySQL, a dokładniej dodanie do niej danych co wydaje mi się lepszym pomysłem bo liczy się tu szybkość, ponieważ aplikacja będzie miała czymś sterować. A do tego chyba zużyje mniej transferu
b)otwarcie strony np: yyy.pl/?up="wartość", a resztę już wykona skrypt po stronie serwera czyli doda mi wpis do bazy - Łatwiejsze do zrobienia jednak nawet tego nie udało mi się zrobić, bo korzystając z Connector.open nie zauważyłem aby w logach apache coś się pojawiało. Jednak wolałbym zrealizować podpunkt "a".

Z góry dzięki za odpowiedzi i proszę tłumaczyć jak zupełnie zielonemu ;)

Gjorni
  • Rejestracja:około 12 lat
  • Ostatnio:około 3 lata
1

Hej,

Tak jak kolega @init0 napomknął w komentarzu skorzystaj z JDBC.

Kopiuj
/*
 * Klasa ConnTo umożliwia utworzenie egzemplarza łączącego się z Twoją bazą danych.
 */
import java.sql.Connection;
import java.sql.DriverManager;
import javax.swing.JOptionPane;

public class ConnTo {
     
     public static Connection ConnectDB() {
          
          try {
               
               Class.forName("com.mysql.jdbc.Driver");
               Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "username", "password");
               return conn;
               
          } catch (Exception e) {
               
               System.out.println(e);
               return null;
          }
     }
}

/*
 * Klasa InsertClass umożliwia utworzenie egzemplarza ustawiającego x, y na dane wartości
 * i skorzystanie z metody setXY() dla dodania nowych wartości do bazy danych.
 */
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class InsertClass {
     
     Connection conn = null;
     PreparedStatement ps = null;
     
     int wsp_x, wsp_y;
     
     public InsertClass(int x, int y) {
     
          conn = ConnTo.ConnectDB();
          
          wsp_x = x;
          wsp_y = y;
     }
     
     public void setXY() {
          
          try {
               
               String sql = "INSERT INTO współrzędne (punkt_x, punkt_y) VALUES (?, ?)";
               
               ps = conn.prepareStatement(sql);
               
               ps.setInt(1, wsp_x);
               ps.setInt(2, wsp_y);
               ps.execute();
               
          } catch (Exception e) {
               
               System.out.println(e);
               
          } finally {
               
               ps.close();
          }
     }
}

/*
 * Klasa Execute tworzy egzemplarz InsertClass i korzysta z jego metody setXY().
 */
public class Execute {
     
     public static void main(String args[]) {
          
          InsertClass insert = new InsertClass(4, 5);
          
          insert.setXY();     
     }
}

Pozdrawiam!


The quieter you become, the more you are able to hear.
DR
  • Rejestracja:prawie 17 lat
  • Ostatnio:ponad 11 lat
0

Dzięki, ale szukam i szukam i gdzieś nawet nadziałem się na informację, że JDBC nie jest dostępne na J2ME. Później znalazłem to w pakietach w netbeans, jednak jeśli wpisuję:

Kopiuj
 import java.sql 

to mi tegoż pakietu nie wykrywa. Szukałem do nocy gdzie to znaleźć i jak zainstalować, jednak nic w sumie ciekawego nie znalazłem.
Stąd też moje pytanie: jak rozwiązać problem z java.sql?

Gjorni
  • Rejestracja:około 12 lat
  • Ostatnio:około 3 lata
1

Ssaj http://dev.mysql.com/downloads/connector/j/ i dodaj do swojego projektu ścieżkę jara, który znajdziesz w folderze po instalacji/rozpakowaniu paczki, do której link zapodałem. Pokój!

tyryry.jpg


The quieter you become, the more you are able to hear.
edytowany 1x, ostatnio: Gjorni
DR
  • Rejestracja:prawie 17 lat
  • Ostatnio:ponad 11 lat
0

No niestety, dorzuciłem kilka paczek (http://i.minus.com/idBSShag6zGyF.png) jednak widocznie w żadnej nie ma java.sql :)
Chyba, że coś robię nie tak, a więc: wchodzę w Właściwości projektu->Biblioteki->dodaję .jar

Dzięki

Gjorni
  • Rejestracja:około 12 lat
  • Ostatnio:około 3 lata
1

Zły import.

Przy obecnym imporcie wywala Ci pewnie na klasie DriverManager. Zaimportuj to, co określiłem w kodzie zamieszczonym wcześniej:

Kopiuj
import java.sql.Connection;
import java.sql.DriverManager;

PS Potrzebna jest tylko paczka, którą podświetliłem na screenie powyżej.


The quieter you become, the more you are able to hear.
edytowany 1x, ostatnio: Gjorni
bogdans
Jesteś pewien, że w JME jest pakiet java.sql? <del>Ogólnie rzecz biorąc, pieprzysz w tym wątku głupoty.</del>
Gjorni
Możesz uściślić, gdzie te głupoty pieprzę? Bo chyba za bardzo nie rozumiem. 1) Podałem sposób łączenia się z bazą danych MySQL, 2) Podałem link do JConncectora, 3) i zwróciłem uwagę na zły import (bo zły był). O co Ci więc łaskawie chodzi?
bogdans
Sorry, dokładnie nie wiem o co mi chodziło. Na pewno przeczytałem import.java.sql.*; tam gdzie było import java.sql i Twoją uwagę Zły import uznałem za głupią.
DR
  • Rejestracja:prawie 17 lat
  • Ostatnio:ponad 11 lat
0

Ok, znalazłem sql tutaj: http://www.java2s.com/Code/Jar/s/sql.htm

Teraz następne problemy. Nie znalazło mi import javax.swing.JOptionPane;
Przy usunięciu nie wyrzuca błędu więc kod wygląda tak:
http://i.minus.com/ibqscypsCcjd4F.png
http://i.minus.com/iblCGl04o9Mla8.png

Do tego na drugim screenie widać błąd. Usunę "static" i znika, ale nie wiem jak to działa na skrypt.

I na obu screenach widać błąd:

C:\Users\PC\Documents\NetBeansProjects\BasicGameTemplate\src\MyGame\ConnTo.java:17: cannot access java.util.Properties
class file for java.util.Properties not found
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "username", "password");
1 error

@Edit:
Ok dograłem http://grepcode.com/snapshot/repository.grepcode.com/java/root/jdk/openjdk/6-b14/ na razie czekam aż się skompiluje.

edytowany 2x, ostatnio: Draggero
Gjorni
  • Rejestracja:około 12 lat
  • Ostatnio:około 3 lata
0

Hej :)

Sorka, że nie nakierowałem Cię od razu na pobieralnię z pakietem sql. Pora była już nie ta, ot co. Co do błędu z drugiego screenu natomiast, to poniżej zamieszczam kod z rozwiązaniem.

Kopiuj
/*
 * Klasa InsertClass umożliwia utworzenie egzemplarza ustawiającego x, y na dane wartości
 * i skorzystanie z metody setXY() dla dodania nowych wartości do bazy danych.
 */
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class InsertClass {
     
     Connection conn = null;
     PreparedStatement ps = null;
     
     int wsp_x, wsp_y;
     
     public InsertClass(int x, int y) {
     
          conn = ConnTo.ConnectDB();
          
          wsp_x = x;
          wsp_y = y;
     }
     
     public void setXY() throws SQLException {
          
          try {
               
               String sql = "INSERT INTO współrzędne (punkt_x, punkt_y) VALUES (?, ?)";
               
               ps = conn.prepareStatement(sql);
               
               ps.setInt(1, wsp_x);
               ps.setInt(2, wsp_y);
               ps.execute();
               
          } catch (Exception e) {
               
               System.out.println(e);
               
          } finally {
               
               ps.close(); // Metoda close() wymusiła dodanie wyrzucania wyjątku SQLException do metody setXY();
          }
     }
}

oraz kod dla klasy Execute:

Kopiuj
import java.sql.SQLException;

/*
 * Klasa Execute tworzy egzemplarz InsertClass i korzysta z jego metody setXY().
 */
public class Execute {
     
     public static void main(String args[]) {
          
          InsertClass insert = new InsertClass(4, 5);
          
          // Blok try-catch dla obsługi wyjątku wyrzucanego przez metodę setXY();
          try{
        	
                insert.setXY();
			
          } catch (SQLException e) {
			
		e.printStackTrace();
          }     
     }
}

EDIT

I na obu screenach widać błąd:

C:\Users\PC\Documents\NetBeansProjects\BasicGameTemplate\src\MyGame\ConnTo.java:17: cannot access java.util.Properties
class file for java.util.Properties not found
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "username", "password");
1 error

No bo oczywiście musisz mieć zainstalowanego MySQL'a, utworzonego użytkownika oraz istniejącą bazę danych. Wtedy też podajesz odpowiednie dane w String'u, który jest parametrem metody getConnection ("localhost:3306" <- host, "/database" <- tu podajesz nazwę swojej bazy danych, "username" <- nazwę użytkownika, "password" <- hasło).

Pozdrawiam :)


The quieter you become, the more you are able to hear.
edytowany 3x, ostatnio: Gjorni
DR
  • Rejestracja:prawie 17 lat
  • Ostatnio:ponad 11 lat
0

@Gjorni

Gjorni napisał(a):

EDIT

I na obu screenach widać błąd:

C:\Users\PC\Documents\NetBeansProjects\BasicGameTemplate\src\MyGame\ConnTo.java:17: cannot access java.util.Properties
class file for java.util.Properties not found
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "username", "password");
1 error

No bo oczywiście musisz mieć zainstalowanego MySQL'a, utworzonego użytkownika oraz istniejącą bazę danych. Wtedy też podajesz odpowiednie dane w String'u, który jest parametrem metody getConnection ("localhost:3306" <- host, "/database" <- tu podajesz nazwę swojej bazy danych, "username" <- nazwę użytkownika, "password" <- hasło).

Pozdrawiam :)

Wyżej też edytowałem, udało mi się ten problem rozwiązać ;) Baza oczywiście stoi i czeka na polecenia.

Teraz dość długo się kompiluje i wyrzuca:

Kopiuj
Error preverifying class java.lang.String
 

EDIT:
Chyba Źle robiłem, execute wrzucałem do innego pliku. Teraz mam pliki ConnTo.java, InsertClass.java, Execute.java + 2 moje. Jednak przy kompilacji dalej wyrzuca to:

Error preverifying class java.lang.String
ERROR: floating-point arguments should not appear

edytowany 2x, ostatnio: Draggero
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)